gpt4 book ai didi

java - Java 编号 "casting"中的任何显着差异

转载 作者:搜寻专家 更新时间:2023-11-01 04:02:58 25 4
gpt4 key购买 nike

转换字面数字与在字面数字上使用后缀有什么显着区别吗?

为了说明...

doSomethingWithLong(2L); //vs...
doSomethingWithLong((long) 2);

澄清一下:我们假设代码仍然使用所使用的文字值进行编译。

最佳答案

在第一个中,您使用的是 long 文字。在第二个中,您将 integer 文字转换为 long

如果值太大而无法存储在 int 类型中,它们的行为将不同。例如,第二个nd 代码不会针对大于 Integer.MAX_VALUE 或小于 Integer.MIN_VALUE 的值进行编译。

在使用整数文字执行算术运算时,您也应该非常小心。当算术运算的结果超出范围时,您可能会得到意想不到的结果。例如:

System.out.println(123456 * 123456); // Will print `-1938485248`

相关帖子:


Let's assume that the code still compiles with the literal value that is used.

假设您有代码编译的文字,字节码没有区别。上面的两个调用生成相同的字节码,如下所示。您可以使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com