Java编译器是否将字节和短字符识别为文本?
我真正想问的是,如果我写:
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;
是无效的语句(短s3=s1+s2;字节b3=b1+b2;)在java中,即使在这两种情况下精度都没有受到影响
如果编译器只是将它们读取为int类型,那么编译器如何维护它们作为字节或短类型的身份
# 1 楼答案
Java没有字节或短文本。当int是编译时常量且在目标类型的范围内时,它确实有一个从int到byte、char和short的implicit assignment conversion
所以,这没关系:
但这不是:
这也不是:
# 2 楼答案
这是因为整型文字(以及更常见的int类型常量表达式)是由编译器专门处理的。当您将整型文字赋值给字节或短字符时,编译器会检查它是否在目标类型的范围内,然后允许在不使用强制转换的情况下进行赋值
# 3 楼答案
您必须强制转换
+
的结果,这是一个int