【问题标题】:Java: Could you explain this simple statement (System.out.println)?Java:你能解释一下这个简单的语句(System.out.println)吗?
【发布时间】:2010-03-02 08:43:17
【问题描述】:
System.out.println(1 + 2 + "3");

输出: 33

System.out.println("1" + 2 + 3);

输出: 123

【问题讨论】:

标签: java


【解决方案1】:

嗯,这就是所谓的操作顺序。

1 + 2 计算为等于 3,然后将字符串“3”附加到它上面,将前 3 转换为字符串并打印“33”。

在您的第二个实例中,“1”已经是一个字符串,因此添加数字会将它们转换为要匹配的字符串,因此附加“2”,然后附加“3”并打印“123”。

附:字符串优先,因为它们比整数具有更高的转换优先级,因此它会将整数转换为字符串,但不会将字符串转换为整数,就像第二个示例一样。

【讨论】:

  • +1 Ewww。 C# 中的隐式转换。我认为 C# 应该是一种纯静态类型的语言。
  • @EvanPlaice:这是 Java 吗?
【解决方案2】:

第一个语句将 1 和 2 相加(因为两者都是整数),然后将它们转换为字符串并附加字符串“3”。

第二条语句有一个字符串“1”,并将所有后续参数也转换为字符串。所以你得到 123。

【讨论】:

    【解决方案3】:

    1 + 2 + "3"的情况

    首先执行 1 和 2 的加法,然后将 3 连接到 3。

    "1" + 2 + 3

    1 连接到 2,结果 ("12") 连接到 3

    要记住的是:

    如果 + 的任何一个操作数是字符串 + 充当连接,否则它充当加法。

    【讨论】:

      【解决方案4】:

      如果是 first ,它会执行 1+2 ,然后它会执行字符串连接操作,这样它就会给你 33。

      在第二个语句的情况下,它对所有操作数进行字符串连接,因为第一个

      操作数是字符串。所以它给你 123

      【讨论】:

        【解决方案5】:

        我不是 Java 专家,但我想这里的表达式是从左到右阅读的

        在第一种情况下,它首先计算 1 + 3,得到 3 然后 3 + "3" 将前 3 转换为字符串并给出 "33"

        在第二种情况下,它以 "1" + 2 开头,得到 "12" 然后是 "12" + 3 = "123"

        这是使用运算符 + 连接 2 个字符串和另一个将 2 个数字相加的副作用。

        【讨论】:

          【解决方案6】:

          这是由Java Language Specification #15.18.1定义的

          + 运算符在语法上是左结合的,无论是通过类型分析确定是表示字符串连接还是数字加法。在某些情况下,需要小心才能获得所需的结果。例如,表达式:
          a + b + c
          始终被视为含义:
          (a + b) + c

          然后对于每个子组(a+b)(我们称之为x)和(x + c)

          如果只有一个操作数表达式是字符串类型,则对另一个操作数执行字符串转换(第 5.1.11 节)以在运行时生成字符串。

          【讨论】:

            【解决方案7】:

            每当另一个操作数出现时,编译器都会将一个操作数转换为它的等价字符串 +String 的一个实例。

            对于第二种情况: 运算符优先级导致“1”与等效于 2 的字符串的连接首先发生。然后将该结果与相当于 3 的字符串第二次连接。

            要先完成整数加法,必须使用括号,像这样:

            System.out.println("1" + (2 + 3));
            

            对于第一种情况:运算符优先级将首先添加 1 和 2。现在,与此结果等效的字符串与“3”连接。

            【讨论】:

              【解决方案8】:

              system.out.println(-1>>>1);

              对于第二种情况:运算符优先级导致“1”与等效于 2 的字符串的连接首先发生。然后将这个结果与相当于 3 的字符串第二次连接起来。

              要先完成整数加法,必须使用括号,像这样:

              【讨论】:

                【解决方案9】:

                在第一种情况下,1 和 2 被视为整数,因此答案是 3,next + 将结果与字符串 3 连接起来。 在第二种情况下,“1”是一个字符串,sop 在出现字符串后将所有内容都视为字符串,即“2”和“3”也充当字符串,因此所有内容都连接起来以显示输出 123

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-11-27
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-11-24
                  相关资源
                  最近更新 更多