A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Mr_Free 中级黑马   /  2013-7-28 05:54  /  1229 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte b= 1+1; 谁能告诉我这样写为什么是对的么?

9 个回复

倒序浏览
实际上在比较旧的版本的JDK上,这行程序是错误的,但在使用的最新版本的JDK中,java会自动转换成我们想要的类型
加号两边都是直接的数字,而不是变量,只有这时候java才会完成类型转换,
回复 使用道具 举报
1+1的类型是整型,而你定义的b是byte类型,所以会丢失精度
回复 使用道具 举报
有了自动装箱后,这都对。
回复 使用道具 举报
巩建 发表于 2013-7-28 07:54
1+1的类型是整型,而你定义的b是byte类型,所以会丢失精度

我发现我按照这样写不论在eclipse还是在cmd里面运行都没有报异常?您能解释下么?
回复 使用道具 举报
Mr_Free 发表于 2013-7-28 08:55
我发现我按照这样写不论在eclipse还是在cmd里面运行都没有报异常?您能解释下么? ...

记错了,不好意思
byte i=1+1;  这个不会丢失精度
            i=i+1;  这个会丢失精度
JDK1.5以后出现的新特性
Integer x=new Integer(4);
Integer x=4; //自动装箱 简化书写  如果要运算,不可以为空
x=x+2;  进行自动拆箱 变成了int类型和 2进行加法运算  在将和进行装箱赋给x
回复 使用道具 举报
本帖最后由 Mr_Free 于 2013-7-28 09:14 编辑
巩建 发表于 2013-7-28 09:06
记错了,不好意思
byte i=1+1;  这个不会丢失精度
            i=i+1;  这个会丢失精度

你是不是随便找了断笔记抄给我的?怎么我看这回答跟我的问题没啥关系呢、?

按照我的理解这个byte b=1+1; 里面右边的1默认应该是int类型的,右边相加得2,然后也算是int赋值给byte 也应该丢失精度了。就不知道他为什么不报异常?装箱拆箱是针对int Integer  ,byte Byte这种基本数据类型和对象包装类来说的吧
回复 使用道具 举报
夜默 金牌黑马 2013-7-28 09:33:28
8#
Mr_Free 发表于 2013-7-28 09:10
你是不是随便找了断笔记抄给我的?怎么我看这回答跟我的问题没啥关系呢、?

按照我的理解这个byte b=1+1; ...

jdk1.5版本的新特性,  自动置入/自动取出,意思就是无需在基本类型和包装类型之间人工地进行转换。        也是自动装箱和自动拆箱。
回复 使用道具 举报
数据类型转换:分为自动类型转换和强制类型转换
数据类型的转换优先级是:double>float>long>int>byte,short,char
所以你这里是优先级高的int类型转换为优先级低的byte类型,需要进行显示类型转换,也就是强制转换。
赋值运算分为2种:
1,等号右边全是由常量和运算符组成的表达式:因为都是常量,所以虚拟机在编译期就能知道表达式的结果,并判断结果是否在被赋值的变量的类型范围内,如果在则直接赋值,如果不在则需要强制转换。
2,等号右边有变量参与运算:如果参与运算的变量是byte、short、char,它们会先转变为int类型,再参与运算,类型总是会提升。
希望对你有帮助!{:soso_e141:}

评分

参与人数 1黑马币 +15 收起 理由
Mr_Free + 15 很给力!

查看全部评分

回复 使用道具 举报
1+1是整形,转化成byte精度会损失。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马