【问题标题】:Difference between int and int received by ParseInt in javajava中ParseInt接收到的int和int的区别
【发布时间】:2012-06-16 00:52:32
【问题描述】:
int i = 0;
int k = Integer.parseInt("12");
int j = k;
System.out.println(i+1 + " " + j+1);

奇怪的是收到的输出是

1 121

我无法弄清楚这个基本区别。请帮帮我。

【问题讨论】:

    标签: java parseint


    【解决方案1】:

    如下使用括号

    System.out.println((i+1) + " " + (j+1));
    

    来自docs

    + 运算符在语法上是左结合的,不管它是否 后来通过类型分析确定表示字符串连接 或加法。在某些情况下,需要小心才能获得所需的结果。 例如,表达式:

    a + b + c 总是被认为是意思:(a + b) + c

    将此扩展到您的场景

    i+1 + " " + j+1
    

    变成了

    (((i + 1) + " ") + j)+1
    

    因为 i 是一个 int 所以 (i + 1) = 1 ,简单的加法

    " "String 因此((i + 1) + " ") = 1 WITH SPACE(字符串连接

    类似地,当添加j 和最后一个1 时,它被添加到String 因此String 发生连接,这证明了你得到的输出是合理的。 p>

    【讨论】:

      【解决方案2】:
          int i = 0;
          int k = Integer.parseInt("12");
          int j = k;
          System.out.println(i+1 + " " + (j+1));
      

      基本上当你把 + " " + 放在这个 java 之后只是将值附加为字符串。

      当你把 (j+1) 放在括号中时,它的优先级会更高,它会首先执行它并执行求和运算。

      【讨论】:

        【解决方案3】:

        那是因为" "

        每当一个字符串出现时,java 不会在此之后进行任何计算,只是将其附加为字符串。

        因此,在您的情况下,i+1 被计算为1,但" " + j+1 中包含字符串。所以,它只是附加在一起形成121

        【讨论】:

        • 但是为什么它没有附加在第一个案例上?如果是真的应该是 01 121
        • 计算第一个字符串出现之前的任何原语/包装器,之后的任何内容都只是附加在一起。
        • @AurA: 因为它基本上可以转换为:" ".concat(j).concat(1)(或使用 StringBuilders 的类似版本,具体取决于您的代码和 JVM 版本)。它猜不出你想要什么,所以从左到右的解释很自然。
        • @Kshitij 感谢您编辑答案,这不是很清楚。 haylem 感谢您的解释
        • 不..它不像01 121...它在概念上像(0+1) + " ".append(j).append(1)
        【解决方案4】:

        您看到此行为的原因是+ 运算符的序列是从左到右计算的。所以它被评估为好像带括号的:

        System.out.println((((i + 1) + " ") + j) + 1);
        

        第一个运算符将两个 int 值相加并产生一个 int 值。下一个+int 添加到String 并生成String。之后,一切都是字符串连接。你可以引入自己的括号来得到你想要的结果。

        【讨论】:

        • 是的+1,这确实是最好的答案
        【解决方案5】:

        当你使用" " 之后的表达式被评估为字符串。

        在表达式周围使用方括号() 可以解决手头的问题。

        System.out.println(i+1 + " " + (j+1));
        

        【讨论】:

          【解决方案6】:

          + 运算符为加法和字符串连接重载你正在做的是字符串连接而不是加法。使用括号执行加法。

          【讨论】:

            【解决方案7】:

            parseint 基本上会返回 int(看 Java API),而 Java 中只有一种 int 类型。在本例中,您使用了“”,java 会将其视为字符串。在任何操作中,请确保不要将字符串与计算混淆。始终使用括号将字符串与计算分开。

            【讨论】:

              【解决方案8】:

              发生这种情况是因为 + 运算符已经离开关联性并且有一个带有字符串的重载函数,所以当你有这个时

              int i = 0; int k = Integer.parseInt("12"); int j = k; i+1 + " " + j+1

              它首先求和 i + 1 给出 1 然后它求和 1 + " ",它使用它的重载函数来连接 1 和“”,因此它给出一个值为“1”的字符串。之后它对"1 " + j 求和,并且由于其中一个操作数是字符串,所以它执行相同的行为等等。

              【讨论】:

                【解决方案9】:

                Interger.parseInt(String str) 是一个包装类方法,用于将 String obj 类型转换为原始数据类型 (int)。这通常用于集合框架中,用于将原始数据类型转换为对象,反之亦然

                【讨论】:

                  猜你喜欢
                  • 2012-03-15
                  • 1970-01-01
                  • 2017-02-23
                  • 2010-12-08
                  • 1970-01-01
                  • 2010-10-05
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-03-20
                  相关资源
                  最近更新 更多