我真正要问的是,如果我写的话:
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 类型?
答案 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类型的常量表达式)是由编译器专门处理的。将整数文字分配给一个字节或短,编译器会检查它是否在目标类型的范围内,然后允许在没有强制转换的情况下进行赋值。