Java:你能解释一下这个简单的语句(System.out.println)吗?

时间:2010-03-02 08:43:17

标签: java

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

输出: 33

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

输出: 123

9 个答案:

答案 0 :(得分:38)

嗯,这是一种叫做操作的命令。

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

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

P.S。字符串优先,因为它们具有比整数更高的转换优先级,因此它将整数转换为字符串而不是字符串转换为整数,如第二个示例所示。

答案 1 :(得分:7)

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

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

答案 2 :(得分:5)

如果是1 + 2 + "3"

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

"1" + 2 + 3

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

要记住的是:

  

如果+中的任何一个操作数是一个字符串+作为连接,那么它就可以作为加法。

答案 3 :(得分:3)

如果是第一个,它会做1 + 2,然后它会进行字符串连接操作,因此它会给你33个。

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

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

答案 4 :(得分:3)

我不是java专家,但我想从左到右读取表达式

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

在第二种情况下,它以“1”+ 2开头,给出“12” 然后“12”+ 3 =“123”

这是一个副作用,有一个操作符+连接2个字符串和另一个添加2个数字。

答案 5 :(得分:3)

这由Java Language Specification #15.18.1

定义
  

+运算符在语法上是左关联的,无论它是由类型分析确定来表示字符串连接还是数字加法。在某些情况下,需要注意获得所需的结果。例如,表达式:
  a + b + c
  总是被视为含义:
  (a + b) + c

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

  

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

答案 6 :(得分:1)

只要另一个操作数,编译器就会将操作数转换为等效的字符串 + 的一个实例是 String

的实例

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

要首先完成整数加法,必须使用括号,如下所示:

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

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

答案 7 :(得分:0)

的System.out.println(-1>>→1);

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

要首先完成整数加法,必须使用括号,如下所示:

答案 8 :(得分:0)

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