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

输出:-

33
123

第一种情况可以理解,但第二种情况不清楚。

4

7 回答 7

4

如果我们在字符串中进行 + 操作,则作为附加(连接)工作。

所以在你的第一种情况下1+2+"3"...... 1+2 =3但是当它执行3+"3"java concate 3 到 String 3 时,它是 33。

在第二个示例中"1"+2+3... 2 附加到字符串“1”中,结果为12,然后"12" + 3结果为 = 123

于 2012-06-25T07:07:08.297 回答
3

如果左边部分是,String那么它将调用+对字符串的操作,即append(concatenation) ,而在数量上它是求和

于 2012-06-25T07:01:46.313 回答
2

+是右结合;"1"+2结果"12",并添加3给出"123"

于 2012-06-25T07:01:41.807 回答
1

评估从左到右进行。第一次遇到字符串时,所有后续值在添加到表达式之前都会隐式转换为字符串。因此,在第一种情况下,您有 1+2 = 3,然后遇到一个字符串并将 2 附加到字符串“3”。第二种情况 - 遇到字符串“1”,然后将每个 int 转换为字符串,然后再添加到迄今为止累积的结果中。

于 2012-06-25T07:03:03.597 回答
0

如果您向字符串添加任何内容,它将是一个字符串,因此 1 +“2”(字符串)是“12”(字符串)。如果您继续添加到字符串,您将继续获得字符串“12”(字符串)+ 33 是​​“1233”(字符串)。我认为这更好地证明了你的问题。

谢谢

卡皮尔·加格

于 2012-06-25T07:08:52.807 回答
0

好吧,数学表达式通常是从右边扫描的。

  1. 在第一种情况下,如果您从右侧扫描,您会得到两个 int 操作数(12),然后将其相加,当您继续前进时,它会变成3作为 int,您会发现一个操作数(“3”)是字符串,因此您可以连接结果是33

  2. 在第二种情况下,如果您从右侧扫描,您会得到一个字符串操作数(“1”),然后将它与2连接起来,因此它是12作为字符串,当您继续前进时,您会找到 int(2),但这一次您的第一个操作数(12)是字符串,所以再次连接它,结果是123

于 2012-06-25T07:08:55.280 回答
0

在第一种情况下,添加 1+2+"3" 第一个 1+2 并附加字符串,因此输出为 33。

但在第二种情况下:“1”+2+3 第一个字符串附加了 2,因此“1”+2 的操作是字符串,最后一个自动是 (“12”+3) 也是字符串。

那就是:第一种情况:数字输出+字符串=字符串

第二种情况:字符串 + 数字 = 字符串

即转换为具有较低/包装数据类型的父类,最终输出将是父类。

于 2012-07-14T12:46:52.673 回答