Java编号“cast”中的任何显着差异

时间:2013-09-05 14:47:38

标签: java

在文字编号上使用后缀与使用字数进行后缀是否存在显着差异?

说明......

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

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

3 个答案:

答案 0 :(得分:8)

在第一个中,您正在使用long字面值。在第二个中,您将integer字面值转换为long

如果值太大而无法存储在int类型中,它们的行为将不相同。例如,2 nd 代码不会编译为大于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

答案 1 :(得分: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的字节代码答案。

答案 2 :(得分:0)

除了某些不编译的东西,如果你不小心,你可能会得到意想不到的结果 - 5d / 2d返回2.5 5/2返回2