Java中连接值的奇怪方式 1 周,4 日 Questions & Answers 69 System.out.println("" + 1+1); System.out.println(1+1 + ""); 为什么第一行打印11而第二行打印2
# 1 楼答案 System.out.println("" + 1+1); 该表达式的第一个元素是String,因此JVM使用重载版本的+,它将值连接在一起,而不是添加它们 System.out.println(1+1 + ""); 此表达式的第一个元素是基元类型。因此,将使用+运算符的“原始”行为。它构建了一个primitves的总和。下一个+找到一个String作为表达式的一部分。因此,它再次使用重载的“版本”并连接这些值 评估顺序也对结果负责 例如,它还打印2: System.out.println("" + (1 + 1)); 因为括号中的表达式首先求值
# 2 楼答案 表达式从左到右求值 在第一个表达式中,“+1+1”被计算为一个字符串和两个整数的串联 在第二个表达式中,第一个+位于两个整数之间,因此它被视为加法,并且加法的结果与空字符串连接。顺便说一句,System.out.println (1+1);将打印与System.out.println (1+1+"");相同的输出
# 3 楼答案 如果你理解这些规则,答案很容易理解 使用多个+ 当+与and Integer和字符串一起使用时,结果将变成字符串 当+与两个整数一起使用时,结果为整数李> 以下 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) 一些程序员使用“+”作为快捷方式,使结果成为字符串。例如,foo接受一个字符串,但x是一个int foo("" + x) 这可以写得更清楚 foo(String.valueOf(x)) 或 foo(Integer.toString(x))
# 1 楼答案
该表达式的第一个元素是
String
,因此JVM使用重载版本的+
,它将值连接在一起,而不是添加它们此表达式的第一个元素是基元类型。因此,将使用
+
运算符的“原始”行为。它构建了一个primitves的总和。下一个+
找到一个String
作为表达式的一部分。因此,它再次使用重载的“版本”并连接这些值评估顺序也对结果负责
例如,它还打印
2
:因为括号中的表达式首先求值
# 2 楼答案
表达式从左到右求值
在第一个表达式中,“+1+1”被计算为一个字符串和两个整数的串联
在第二个表达式中,第一个+位于两个整数之间,因此它被视为加法,并且加法的结果与空字符串连接。顺便说一句,
System.out.println (1+1);
将打印与System.out.println (1+1+"");
相同的输出# 3 楼答案
如果你理解这些规则,答案很容易理解
以下
编译器将其理解为
鉴于
编译器将其理解为
一些程序员使用“+”作为快捷方式,使结果成为字符串。例如,foo接受一个字符串,但x是一个int
这可以写得更清楚
或