int 和字符串的类型转换,java
最后一次考试,我们进行了练习来确定以下代码的输出:
System.out.println(2 + 3 + ">=" + 1 + 1);
我的答案是,但现在我意识到这是错误的答案。它应该是.但是为什么?5 >= 2
5 >= 11
最后一次考试,我们进行了练习来确定以下代码的输出:
System.out.println(2 + 3 + ">=" + 1 + 1);
我的答案是,但现在我意识到这是错误的答案。它应该是.但是为什么?5 >= 2
5 >= 11
假设您的语法是:
System.out.println(2 + 3 + ">=" + 1 + 1);
表达式从左到右计算,在这种情况下,2 + 3 求和为 5,当 “添加”到字符串时,结果为 ,当添加到 1 时,再添加 1,您的结果是:"5 >="
"5 >= 1"
"5 >= 11"
因为将字符串“添加”到任何内容都会导致串联。以下是在编译阶段对其进行评估的方式:
((((2 + 3) + ">=") + 1) + 1)
编译器会做常量折叠,所以编译器实际上可以一次减少一个表达式,并替换一个常量表达式。但是,即使它不这样做,运行时路径实际上也是相同的。所以你来了:
((((2 + 3) + ">=") + 1) + 1) // original
(((5 + ">=") + 1) + 1) // step 1: addition (int + int)
(("5>=" + 1) + 1) // step 2: concatenation (int + String)
("5>=1" + 1) // step 3: concatenation (String + int)
"5>=11" // step 4: concatenation (String + int)
您可以通过用括号切除第二个数值加法表达式来强制整数加法。例如:
System.out.println(2 + 3 + ">=" + 1 + 1); // "5>=11"
System.out.println(2 + 3 + ">=" + (1 + 1)); // "5>=2"