Java编译器是否将字节和短字识别为文字?

时间:2014-07-19 06:53:07

标签: java literals

我真正要问的是,如果我写的话:

byte b=13;
short s=14;

然后右侧的值(即13和14)分别被视为字节 只是被视为 int 由编译器输入。 如果它们分别被读作字节和短路,那么为什么,

byte b1=13;
byte b2=23;
byte b3=b1+b2;

short s1=14;
short s2=24;
short s3=s1+s2;

是java中的无效语句(短s3 = s1 + s2;以及字节b3 = b1 + b2;),即使精度没有受到损害。

如果它们只是被编译器读成 int 类型,那么编译器如何维护它们的身份 byte short 类型?

3 个答案:

答案 0 :(得分:2)

Java没有字节或短文字。它的作用是从int到byte的char implicit assignment conversion,当int是编译时常量并且在目标类型的范围内时,char和short。

所以,这没关系:

byte b = 13+14; // implicit conversion

但这不是:

void method(byte b) {}

method(13);

也不是这样:

byte b = 13+nonConstant;

答案 1 :(得分:0)

您必须投放+ int的结果。

byte b1 = 13;
byte b2 = 23;
byte b3 = (byte) (b1 + b2);

short s1 = 14;
short s2 = 24;
short s3 = (short) (s1 + s2);

答案 2 :(得分:0)

这是因为整数文字(更常见的是int类型的常量表达式)是由编译器专门处理的。将整数文字分配给一个字节或短,编译器会检查它是否在目标类型的范围内,然后允许在没有强制转换的情况下进行赋值。