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

smp*_*p7d 3 java

在文字数字上使用字母数字与使用后缀相比,是否有任何显着差异?

为了显示...

doSomethingWithLong(2L); //vs...
doSomethingWithLong((long) 2);
Run Code Online (Sandbox Code Playgroud)

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

Roh*_*ain 8

在第一个,你使用long文字.在第二个中,你将一个integer文字投射到一个long.

如果值太大而无法存储在int类型中,它们将不会表现相同.例如,第二代码不会编译为大于Integer.MAX_VALUE或小于的值Integer.MIN_VALUE.

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

System.out.println(123456 * 123456); // Will print `-1938485248`
Run Code Online (Sandbox Code Playgroud)

相关文章:


我们假设代码仍然使用所使用的文字值进行编译.

假设您有代码编译的文字,字节码没有区别.以上两个调用生成相同的字节码,如下所示.您可以使用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
Run Code Online (Sandbox Code Playgroud)


Sot*_*lis 8

你将无法编译

 doSomethingWithLong((long) 222222222222222222); 
 // The literal 222222222222222222 of type int is out of range 
Run Code Online (Sandbox Code Playgroud)

因为222222222222222222不适合int.

您可以在此官方Java教程中阅读有关原始数据类型的信息.

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的字节代码答案.