社区
Java SE
帖子详情
再次讨论int、byte编译问题
tyut8518
2008-09-09 07:21:04
1. byte b1=(int)1;
2. byte b2 =1;
3. byte b3 =b1+b2;
4. byte b4 =1+1;
第3行为什么编译不能通过?
...全文
145
10
打赏
收藏
再次讨论int、byte编译问题
1. byte b1=(int)1; 2. byte b2 =1; 3. byte b3 =b1+b2; 4. byte b4 =1+1; 第3行为什么编译不能通过?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
LoveJava520
2008-09-10
打赏
举报
回复
b1+b2,是整形,要转换为byte是错误的
axman
2008-09-10
打赏
举报
回复
换句话说,i=i++;可以,i=i+1;不行,那些牛人你来回答啊.
tyut8518
2008-09-09
打赏
举报
回复
呵呵 大家都比我牛 那你就告诉我吧 我没学过编译原理 有点不明白里边执行的原理与差别
axman
2008-09-09
打赏
举报
回复
你让上面的所谓的牛人答啊,不知道编译原理.想当然地瞎哄.
tyut8518
2008-09-09
打赏
举报
回复
1. byte b1=(int)1;
2. byte b2 =1;
3. byte b3 =b1+b2;
4. byte b4 =1+1;
在数值计算时,整数1也是默认为int类型的,在其他三行为什么就不需要强制类型转换呢???
no9988
2008-09-09
打赏
举报
回复
[Quote=引用 3 楼 ZangXT 的回复:]
byte b3 =b1+b2;
b1+b2计算的时候把类型提升为int,所以结果是int类型的,你直接把int数赋给byte数所以报错.
直接看报什么错误就知道了.
[/Quote]
回答很对
因为 两个byte 相加的后的类型 会 转换成 int的
所以你 需要强制转换 回去`
`byte b3 =(byte)b1+b2;
这样写就应该对了
`
axman
2008-09-09
打赏
举报
回复
编译指令很简单,小于10的操作都有专门的指令,节省了操作数占用的空间.
i_load1;
就是byte操作直接用int指令操作. i_xxxx,没有b_xxx,s_xxx.c_xxx,所有byte,short,char,都是i_指令,最后itox转换回去
ZangXT
2008-09-09
打赏
举报
回复
byte b3 =b1+b2;
b1+b2计算的时候把类型提升为int,所以结果是int类型的,你直接把int数赋给byte数所以报错.
直接看报什么错误就知道了.
tyut8518
2008-09-09
打赏
举报
回复
不太了解状态机的工作原理,能否通俗一点 ,我只想了解JVM是怎么编译这些语句的
axman
2008-09-09
打赏
举报
回复
因为JVM为了做得小,减少了指令集.所有小于int的操作都以int指令操作然后itoX转换成原来的类型.
指令没有状态机,byte i = 0;i++操作从操作数知道i是byte,所以++后会自动itob.
但+操作和赋值操作之间没有状态.也就是根本不知道+后要赋给什么,有可能赋给long
所以不可能推算出itob.当然根据源码的下一行可以推算,但那不是指令做的事.
int
与
byte
数组相互转换
int
转换成长度为4的
byte
数组,长度为4的
byte
数组合成一个
int
. static
int
byte
s2
int
(
byte
[] b) { //
byte
[] b=new
byte
[]{1,2,3,4};
int
mask=0xff;
int
temp=0;
int
res=0; for(
int
int
与
byte
[] 的相互转换
关于
int
与
byte
[] 的相互转换,Mattias Sjogren 介绍了3种方法。请参见 《将
Int
eger转换成
Byte
Array》。其实应该还有不少方法。在这里,我归纳了包括M
Java中两个
byte
类型相加结果赋值给
byte
类型的变量会报
编译
错误,
byte
加
byte
的结果为什么是
int
?
之前偶然看到有
讨论
这个
问题
,在网上搜了半天,结果都不尽如人意,解释没有到位, 有的说
byte
加
byte
默认就是
int
,那为什么这么做呢? 这不是找麻烦么?这种奇怪的默认还有哪些?带来一些列疑问。。。。。。 有的说...
java---为什么
byte
+
byte
=
int
byte
也是基本数据类型范围是-128~127 但是做加法时会有这么一个
问题
: ...我们清晰的看到,
byte
+
byte
=
byte
报错了,这是为什么呢。...所以没有
byte
的加法,只支持
int
的加法,故会自动把
byte
扩展成
int
。 pub..
关于
byte
a=1;
byte
b=2;
byte
c=a+b;报错,而
byte
d=1+2;却不报错,这个
问题
的原因和自己的一些理解
我们来看一下代码---->
byte
a=1;
byte
b=2;
byte
c=a+b;//
编译
不通过 ...那么
问题
就来了,
byte
d=1+2;这里=右边的1+2不也是
int
类型吗为什么它却不报错呢? 我刚开始也一直想不通,后来发现这里...
Java SE
62,615
社区成员
307,318
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章