System.out.println(1 + 2 + "3");
输出: 33
System.out.println("1" + 2 + 3);
输出: 123
答案 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