再次讨论int、byte编译问题 1. byte b1=(int)1; 2. byte b2 =1; 3. byte b3 =b1+b2; 4. byte b4 =1+1; 第3行为什么编译不能通过? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为JVM为了做得小,减少了指令集.所有小于int的操作都以int指令操作然后itoX转换成原来的类型.指令没有状态机,byte i = 0;i++操作从操作数知道i是byte,所以++后会自动itob.但+操作和赋值操作之间没有状态.也就是根本不知道+后要赋给什么,有可能赋给long 所以不可能推算出itob.当然根据源码的下一行可以推算,但那不是指令做的事. 不太了解状态机的工作原理,能否通俗一点 ,我只想了解JVM是怎么编译这些语句的 byte b3 =b1+b2; b1+b2计算的时候把类型提升为int,所以结果是int类型的,你直接把int数赋给byte数所以报错.直接看报什么错误就知道了. 编译指令很简单,小于10的操作都有专门的指令,节省了操作数占用的空间.i_load1;就是byte操作直接用int指令操作. i_xxxx,没有b_xxx,s_xxx.c_xxx,所有byte,short,char,都是i_指令,最后itox转换回去 回答很对 因为 两个byte 相加的后的类型 会 转换成 int的 所以你 需要强制转换 回去``byte b3 =(byte)b1+b2;这样写就应该对了 ` 1. byte b1=(int)1; 2. byte b2 =1; 3. byte b3 =b1+b2; 4. byte b4 =1+1; 在数值计算时,整数1也是默认为int类型的,在其他三行为什么就不需要强制类型转换呢??? b1+b2,是整形,要转换为byte是错误的 换句话说,i=i++;可以,i=i+1;不行,那些牛人你来回答啊. 请教有关图像的问题!icon.getIcon().getScaledInstance(参数) 打成jar包的程序怎么显示控制台 接口可以用匿名内部类实例化,那抽象类可以吗? 请教marker interface的问题,高分悬赏!!! 参数无法接收 如何在java程序中给定一个关键词,向google请求查询页面?? 如何编译没有main的java JBUILDER,eclips??? 在java如何获取当前运行的程序的路径? 请问为什么用Visual cafe写的Applet不能用? 关于PriorityQueue 看看这个java程序的问题
但+操作和赋值操作之间没有状态.也就是根本不知道+后要赋给什么,有可能赋给long
所以不可能推算出itob.当然根据源码的下一行可以推算,但那不是指令做的事.
b1+b2计算的时候把类型提升为int,所以结果是int类型的,你直接把int数赋给byte数所以报错.
直接看报什么错误就知道了.
i_load1;
就是byte操作直接用int指令操作. i_xxxx,没有b_xxx,s_xxx.c_xxx,所有byte,short,char,都是i_指令,最后itox转换回去
回答很对 因为 两个byte 相加的后的类型 会 转换成 int的
所以你 需要强制转换 回去`
`byte b3 =(byte)b1+b2;
这样写就应该对了
`
2. byte b2 =1;
3. byte b3 =b1+b2;
4. byte b4 =1+1; 在数值计算时,整数1也是默认为int类型的,在其他三行为什么就不需要强制类型转换呢???