System.out.println(1+2+"3");
System.out.println("1"+2+3);
输出:-
33
123
第一种情况可以理解,但第二种情况不清楚。
如果我们在字符串中进行 + 操作,则作为附加(连接)工作。
所以在你的第一种情况下1+2+"3"
...... 1+2 =3
但是当它执行3+"3"
java concate 3 到 String 3 时,它是 33。
在第二个示例中"1"+2+3
... 2 附加到字符串“1”中,结果为12
,然后"12" + 3
结果为 = 123
。
如果左边部分是,String
那么它将调用+
对字符串的操作,即append
(concatenation) ,而在数量上它是求和
+
是右结合;"1"+2
结果"12"
,并添加3
给出"123"
。
评估从左到右进行。第一次遇到字符串时,所有后续值在添加到表达式之前都会隐式转换为字符串。因此,在第一种情况下,您有 1+2 = 3,然后遇到一个字符串并将 2 附加到字符串“3”。第二种情况 - 遇到字符串“1”,然后将每个 int 转换为字符串,然后再添加到迄今为止累积的结果中。
如果您向字符串添加任何内容,它将是一个字符串,因此 1 +“2”(字符串)是“12”(字符串)。如果您继续添加到字符串,您将继续获得字符串“12”(字符串)+ 33 是“1233”(字符串)。我认为这更好地证明了你的问题。
谢谢
卡皮尔·加格
好吧,数学表达式通常是从右边扫描的。
在第一种情况下,如果您从右侧扫描,您会得到两个 int 操作数(1和2),然后将其相加,当您继续前进时,它会变成3作为 int,您会发现一个操作数(“3”)是字符串,因此您可以连接结果是33。
在第二种情况下,如果您从右侧扫描,您会得到一个字符串操作数(“1”),然后将它与2连接起来,因此它是12作为字符串,当您继续前进时,您会找到 int(2),但这一次您的第一个操作数(12)是字符串,所以再次连接它,结果是123。
在第一种情况下,添加 1+2+"3" 第一个 1+2 并附加字符串,因此输出为 33。
但在第二种情况下:“1”+2+3 第一个字符串附加了 2,因此“1”+2 的操作是字符串,最后一个自动是 (“12”+3) 也是字符串。
那就是:第一种情况:数字输出+字符串=字符串
第二种情况:字符串 + 数字 = 字符串
即转换为具有较低/包装数据类型的父类,最终输出将是父类。