有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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类型,那么编译器如何维护它们作为字节类型的身份


共 (3) 个答案

  1. # 1 楼答案

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

    所以,这没关系:

    byte b = 13+14; // implicit conversion
    

    但这不是:

    void method(byte b) {}
    
    method(13);
    

    这也不是:

    byte b = 13+nonConstant;
    
  2. # 2 楼答案

    这是因为整型文字(以及更常见的int类型常量表达式)是由编译器专门处理的。当您将整型文字赋值给字节或短字符时,编译器会检查它是否在目标类型的范围内,然后允许在不使用强制转换的情况下进行赋值

  3. # 3 楼答案

    您必须强制转换+的结果,这是一个int

    byte b1 = 13;
    byte b2 = 23;
    byte b3 = (byte) (b1 + b2);
    
    short s1 = 14;
    short s2 = 24;
    short s3 = (short) (s1 + s2);