我想知道为什么以下代码的第5行和第6行的输出不同?
/*1*/ class A
/*2*/ {
/*3*/ public static void main(String[] args)
/*4*/ {
/*5*/ System.out.println(3+5+"Message");
/*6*/ System.out.println("Message"+3+5);
}
}
输出:
8Message
Message35
为什么第二行代码有35
而不是8
而不是35
?
答案 0 :(得分:0)
除了赋值运算符之外的所有二元运算符都是从左到右计算的;赋值运算符从右到左进行求值。
操作符+从左到右进行评估。
这就是为什么在第一种情况下它是加法。在第二种情况下,它是字符串连接。
答案 1 :(得分:0)
System.out.println(3+5+"Message");
从左到右评估表达。左右+
是整数,因此+
的加法和右边是字符串连接
让我们以这种方式打破它(3+5+"Message")
3=integer
+=operator
5=integer
(3)integer (+) (5)integer = (8)integer,
而不是下一次传递
(8)integer (+) ("Message")String = (8Message)String
因此输出为8Message
System.out.println("Message"+3+5);
这里从开始+
运算符开始,字符串因此会发生连接。
因此输出为Message35
答案 2 :(得分:0)
Like the post above sais, you have operator precedence. Everything is evaluated from left to right.
System.out.println(3+5+"Message");
被翻译为
System.out.println((3+5)+"Message"); So first the addition happens and the result concatenates with the string.
在另一种情况下:
System.out.println("Message"+3+5);
被翻译为
System.out.println(("Message"+3)+5);
你有一个字符串和一个数字Message3 + 5 = Message53
我希望这清除它:)