JAVA初学者, 一些坑求助

这里有一些语句, 其中错误的都注释掉了,都是类型错, 求解为什么?
例如第一处注释
这边X是int型, b1是byte型, 无法赋值
它下一行Y是int型, b2是byte型, 赋值成功
是否和编译过程有关?

    int a = 1;
    final int X = a;
    final int Y = 10;
    //byte b1 = X;
    byte b2 = Y;
    byte b3 = Y + 1;
    //byte b4 = (4 < 5)? X : 4;
    byte b5 = (4 < 5)? Y : 4;
    byte b6 = 12;
    byte b7 = (4 < 5)? b6 : 4;
    //byte b8 = b6 + 4;
    byte b9 = (4 < 5)? b6 : ('3' + 1);
    //byte b10 = (4 < 5)? b6 : '3';
    char ch1 = 'A';
    char ch2 = (4 < 5)? ch1 : (4 + 1);
    //char ch3 = (4 < 5)? 'A' : b6;
    //short s = (4 < 5)? 'A' : b6;

3个回答

  具体分析了一下原因是,你的X的赋值是通过变量int a来完成的,编译器无法确定a的值是否在byte数据类型的范围内,所以编译器会报错Type mismatch: cannot convert from int to byte。所以需要自己强制转换
 而byte b2=Y之所以能成功是因为Y的值是常量10,在byte数据范围内,编译器会自动完成int-byte的转换的,反编译可以看到这行是bipush 10,自动将int转换成byte并入栈。这个编译器会自动识别并完成类型转换的。
 但是如果你修改下Y的值成200的话,同样还是会报跟X一样的错误。所以这个问题的根源是编译器对byte和int自动转换的处理方式。
Crow_Null
Crow_Null 编译的时候的问题, 没想这么深, 多谢
接近 5 年之前 回复
Theresa_zxx
ProXin 赞一个
接近 5 年之前 回复

你的x是字母,y是数字,肯定不一样啊

Theresa_zxx
ProXin 不好意思,没看到a=1
接近 5 年之前 回复
int和byte是两种不同的数据类型,如果你一定要这么赋值的话就需要强制转换,改成这样就可以了:byte b1=(byte) X;
立即提问