3
A
回答
8
在第一个中,您使用的是文字long
。在第二个中,您将integer
文字转换为long
。
如果值太大而无法存储在int
类型中,它们将不会表现相同。例如,对于大于Integer.MAX_VALUE
或小于Integer.MIN_VALUE
的值,代码将不编译。
在使用整数文字进行运算时,您应该非常小心。当算术运算的结果超出范围时,您可能会得到意想不到的结果。对于e.g:
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
8
你不会是能够编译
doSomethingWithLong((long) 222222222222222222);
// The literal 222222222222222222 of type int is out of range
因为222222222222222222
不适合在int
。
您可以阅读关于this official Java tutorial中的原始数据类型。
int数据类型是一个32位有符号二进制补码整数。它有 最小值-2,147,483,648和最大值2,147,483,647 (含)。
长数据类型是一个64位有符号二进制补码整数。它有 最小值-9,223,372,036,854,775,808和最大值 9,223,372,036,854,775,807(含)。
我们假设代码仍然使用所使用的文字值进行编译。
它们是等价的,请参阅Rohit的字节码答案。
0
从某些事情
除了不能编译,你可以得到意想不到的结果,如果你不小心 - 5D/2D返回2.5 5/2回报2
相关问题
- 1. 差异和铸造
- 2. 型铸造差异
- 3. BitConverter VS铸造差异
- 4. 铸造异常在Java中
- 5. java的铸造ClassCastException异常
- 6. C#铸造类型之间的差异
- 7. 显着差异在
- 8. 在Java中铸造字符
- 9. 在Java中的类型铸造/铸造
- 10. 铸造误差ConnectionStringSettingsCollection
- 11. 异常铸造
- 12. 铸造异常
- 13. Java的铸造和C++的铸造
- 14. 在Java中铸造
- 15. 铸造异常时铸造双
- 16. 铸造沿着继承树
- 17. 任何数字的Javascript差异
- 18. 铸造任何元组2
- 19. 铸造在Java
- 20. java中的类铸造
- 21. Java类铸造抛出异常
- 22. 日期时间差铸造
- 23. Java中的浮点数铸造
- 24. 铸造到java中的通用参数
- 25. 铸造字节枚举在Java中
- 26. 铸造长字节在Java中
- 27. 数组与数组列表中的显着差异?
- 28. sql包中的Query和QueryRow之间有任何显着的性能差异吗?
- 29. 型铸造误差和构造
- 30. contains和containstable之间的显着差异?
有时你需要发布提问之前做一些测试。 –
关于您的说明:生成的字节码没有区别。 – jlordo