在Java中连接值的奇怪方法

时间:2014-11-06 14:55:15

标签: java

System.out.println("" + 1+1);
System.out.println(1+1 + "");

为什么第一行打印11而第二行打印2

2 个答案:

答案 0 :(得分:4)

表达式从左到右进行评估。

在第一个表达式中,“”+ 1 + 1被评估为String和两个整数的串联。

在第二个表达式中,第一个+在两个整数之间,因此它被视为加法,并且该加法的结果与空字符串连接。顺便说一下,System.out.println (1+1);会输出与System.out.println (1+1+"");

相同的输出

答案 1 :(得分:1)

如果您理解这些规则,答案很容易理解。

  • 使用多个+
  • 时评估是从左到右
  • 当+与Integer和String一起使用时,结果变为String
  • 当+与两个整数一起使用时,结果为整数。

以下

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))