System.out.println("" + 1+1);
System.out.println(1+1 + "");
为什么第一行打印11
而第二行打印2
?
答案 0 :(得分:4)
表达式从左到右进行评估。
在第一个表达式中,“”+ 1 + 1被评估为String和两个整数的串联。
在第二个表达式中,第一个+在两个整数之间,因此它被视为加法,并且该加法的结果与空字符串连接。顺便说一下,System.out.println (1+1);
会输出与System.out.println (1+1+"");
答案 1 :(得分:1)
如果您理解这些规则,答案很容易理解。
以下
System.out.println("" + 1 + 1);
被编译器理解为
System.out.println(("" + 1) + 1); // "" + 1 becomes "1" (String)
System.out.println("1" + 1); // "1" + 1 becomes "11" (String)
尽管
System.out.println(1 + 1 + "");
被编译器理解为
System.out.println((1 + 1) + ""); // 1 + 1 becomes 2 (Integer)
System.out.println((2) + ""); // 2 + "" becomes "2" (String)
有些程序员使用"" +作为使结果成为String的快捷方式。例如,foo接受一个String,但x是一个int。
foo("" + x)
这可以写得更清楚
foo(String.valueOf(x))
或
foo(Integer.toString(x))