转换文字数字与在文字数字上使用后缀有什么显着区别吗?
为了显示...
doSomethingWithLong(2L); //vs...
doSomethingWithLong((long) 2);
澄清一下:让我们假设代码仍然使用所使用的文字值进行编译。
最佳答案
在第一个中,您使用的是 long
文字。在第二个中,您将 integer
文字转换为 long
。
如果值太大而无法存储在 int
类型中,则它们的行为将不同。例如,第二个代码不会编译为大于 Integer.MAX_VALUE
或小于 Integer.MIN_VALUE
的值。
使用整数文字进行算术运算时也应该非常小心。当算术运算的结果超出范围时,您可能会得到意想不到的结果。例如:
System.out.println(123456 * 123456); // Will print `-1938485248`
相关帖子:
假设您有代码编译的文字,字节码没有区别。以上两个调用生成相同的字节码,如下所示。您可以使用
javap -c YourClass
命令查看字节码:0: ldc2_w #2 // long 2l
3: invokestatic #4 // Method doSomethingWithLong:(J)V
6: ldc2_w #2 // long 2l
9: invokestatic #4 // Method doSomethingWithLong:(J)V
关于java - Java 编号的任何显着差异 "casting",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18639448/