Anu*_*jee 2 java operator-precedence
如何在此方法中评估表达式.例如,System.out.println("Result"+2+3+4)产生Result234但System.out.println("Result"+2+3*5)返回Result215
我理解表达式是从左到右计算的,如果一个操作数是String,那么结果将是String.对于上面的第二个例子,它是有道理的.但是例如上面的例子1结果不应该是Result27?
更多示例将有所帮助.
String连接运算符(+)触发了对int值的String转换的需要,因为左边的第一个参数是String.在评估连接运算符之前,优先顺序使得两个整数的乘法在第二个示例中首先出现.
我需要检查字节码,但我相信编译器使用了StringBuilder这里,所以真正的代码看起来像:
System.out.println(new StringBuilder("Result").append(2).append(3).append(4));
System.out.println(new StringBuilder("Result").append(2).append(3 * 5));
Run Code Online (Sandbox Code Playgroud)
编辑完整性:
您的示例,因为它们完全由文字(字符串和基元)组成,在编译时处理,并简单地转换为字符串文字.这是编译时间常量表达式.优先权仍然适用,因此结果是相同的.
如果其中任何一个是变量,例如:
int x = 5;
System.out.println("Result"+2+x);
Run Code Online (Sandbox Code Playgroud)
然后StringBuilder在运行时使用a 将文字部分与变量的值连接起来.
(在查看字节码和JLS后编辑为权威)
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |