有必要使用后缀分隔符来表示源代码中使用的常量类型,例如 L 长。但是,对于短裤和字节,没有分隔符,所以我需要像这样显式地转换常量值:
short x = (short)0x8000;
我想知道Java是否在编译的字节码中采取了额外的步骤来实际将它从整数类型转换为短类型,或者它是否知道这将适合一个单词并按原样使用常量?否则,有没有办法可以对这些数字进行后缀来表示短或字节?
有必要使用后缀分隔符来表示源代码中使用的常量类型,例如 L 长。但是,对于短裤和字节,没有分隔符,所以我需要像这样显式地转换常量值:
short x = (short)0x8000;
我想知道Java是否在编译的字节码中采取了额外的步骤来实际将它从整数类型转换为短类型,或者它是否知道这将适合一个单词并按原样使用常量?否则,有没有办法可以对这些数字进行后缀来表示短或字节?
我想知道Java是否在编译的字节码中采取了额外的步骤来实际将它从整数类型转换为短类型,或者它是否知道这将适合一个单词并按原样使用常量?
我认为它知道它会适合一个词并按原样使用它。例如字节码:
public class IntToShortByteCode {
public static void main(String... args){
short x = (short)0x8888;
System.out.println(x);
}
}
是(javac 1.6.0_14):
Compiled from "IntToShortByteCode.java"
public class IntToShortByteCode extends java.lang.Object{
public IntToShortByteCode();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: sipush -30584
3: istore_1
4: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
7: iload_1
8: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
11: return
}
否则,有没有办法可以对这些数字进行后缀来表示短或字节?
不。