Java постфиксные разделители - PullRequest
6 голосов
/ 18 ноября 2011

Необходимо использовать постфиксный разделитель для обозначения типа константы, используемой в исходном коде, например, L для длинных. Однако для шортов и байтов разделителей нет, поэтому мне нужно явно привести константное значение так:

short x = (short)0x8000;

Мне было интересно, предпринимает ли Java дополнительные шаги в скомпилированном байт-коде, чтобы фактически преобразовать его из целочисленного типа в короткий, или оно знает, что это будет соответствовать слову и использовать константу как есть? Иначе, есть ли способ, которым я могу добавить такие цифры для обозначения коротких или байтовых символов?

1 Ответ

5 голосов
/ 18 ноября 2011

Мне было интересно, предпринимает ли Java дополнительные шаги в скомпилированном байт-коде, чтобы фактически преобразовать его из целочисленного типа в короткий, или он знает, что это будет соответствовать слову и использовать константу как есть?

Я думаю, он знает, что он впишется в слово, и использует его как есть.Например, байт-код для:

public class IntToShortByteCode {
   public static void main(String... args){
        short x = (short)0x8888;
        System.out.println(x);
    }
}

is (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

}

В противном случае, есть ли способ, которым я могу добавить такие цифры для обозначения коротких илибайт?

Нет.

...