Crow_Null 2016-01-06 11:54 采纳率: 100%
浏览 1739
已采纳

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条回答 默认 最新

  • 毕小宝 博客专家认证 2016-01-06 22:59
    关注
      具体分析了一下原因是,你的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自动转换的处理方式。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建