黑马程序员技术交流社区

标题: 关于byte型数据问题 [打印本页]

作者: 马富林    时间: 2013-12-15 18:48
标题: 关于byte型数据问题
请帮忙看一下下面两个语句的对错,和原因
byte b = 1 + 1; byte c = 1;  c += 1;
顺便问下+=这个运算符到底是什么意思啊?我好像在毕老师视频里没看到讲这个运算符的。
比如
byte x=5;
x+=1;
到底包括了哪些操作?有没有涉及到类型转换的问题?




作者: 四五六七八    时间: 2013-12-15 19:55
c += 1  等同于  c=(byte)(c+1)   会进行强制转换
作者: 豆晨阳    时间: 2013-12-15 20:02
俩个语句都不错,c+=1能自动转换类型
这里有一些类型转换的规则你可以看下
1、基本数据类型的转换是指由系统根据转换规则自动完成,不需要程序员明确地声明不同数据类型之间的转换。转换在编译器执行,而不是等到运行期再执行。
2、基本数据类型的转换在赋值、方法调用和算术运算三种情况下都会发生。在进行方法调用时,数据类型指调用方法向被调用方法传递参数,即实参和型参类型不一致,从而发生了类型转换。
3、赋值和方法调用的基本数据类型转换规则一样。合法的基本类型转换原则是指从取值范围窄的类型向取值范围宽的类型转换,如果是从取值范围宽的类型向取值范围窄的类型转换,则会产生编译错误。
4、具体规则:
(1)布尔型和其它基本数据类型之间不能相互转换;
(2)byte型可以转换为short、int、、long、float和double;
(3)short可转换为int、long、float和double;
(4)char可转换为int、long、float和double;
(5)int可转换为long、float和double;
(6)long可转换为float和double;
(7)float可转换为double;
也就是说,只能有取值窄的范围向宽范围转换,反之则不行。
5、Java中无后缀数字型,文字型共有两种默认类型,无小数点的整数型文字值、默认类型为整型int,带有小数点的浮点数型文字值,默认类型为双精度double。
6、在赋值语句中,默认类型为整型的无小数点整数型文字值作为右操作数时,可以赋值给取值范围比整型小的变量,前提是文字值对于的实际数值在变量类型的取值范围内。而默认类型为双精度的带有小数点的浮点数型文字值只能赋值给双精度型变量,不能赋值给单精度型变量。
7、基本数据类型的转换在算术运算情况下,正对单操作数运算符和双操作数运算符的转换规则是不一样的。
但操作数运算符算术运算时基本转换规则如下:
(1)当运算符为取正运算符(+)。取负运算符(-)或按位取反运算符(~)时,如果操作数为byte、char或short,则先被转换为int,再参与运算。
(2)当运算符为自动递增运算符(++)或自动递减运算符(--)时,如果操作数为byte,short或char,则不用先被转换为int,而是直接参与算术运算,且运算结果类型也不变。
(3)如果操作数为int或long,则无论运算符为何种单操作数运算符,均不发生类型转换,且运算结果类型也不变。
双操作数运算符算术运算时基本转换规则如下:
(1)如操作数之一为double,则另一个操作数先被转化为double,再参与算术运算。
(2)如两操作数均不为double,当操作数之一为float,则另一操作数先被转换为float,再参与运算。
(3)如两操作数均不为double或float,当操作数之一为long,、则另一操作数先被转换为long,再参与算术运算。
(4)如两操作数均不为double、float或long,则两操作数先被转换为int,再参与运算。
(5)如采用+=、*=等缩略形式的运算符,系统会自动强制将运算结果转换为目标变量的类型。
运算符:
x+=y就等于x=x+y
另外还有-=,*=,/=,同样的意思
作者: 绕世界流浪丶    时间: 2013-12-15 20:57
首先byte b = 1+1:-------1+1是int 类型进行运算 所以不能直接赋给byte类型的b
c+=1;就是c=c+1;就是左边和右边相加再赋给左边
byte x=5;
x+=1;
x=x+1就这样而已
作者: 75100313    时间: 2013-12-15 21:47
+=自动强制转换
作者: 马富林    时间: 2013-12-15 22:22
豆晨阳 发表于 2013-12-15 20:02
俩个语句都不错,c+=1能自动转换类型
这里有一些类型转换的规则你可以看下
1、基本数据类型的转换是指由系 ...

byte c = 1;  c += 1;
那上面的结果中c运算后是被转换成了byte还是int型的?
作者: 豆晨阳    时间: 2013-12-15 23:18
马富林 发表于 2013-12-15 22:22
byte c = 1;  c += 1;
那上面的结果中c运算后是被转换成了byte还是int型的?

被转换成了byte
作者: 豆晨阳    时间: 2013-12-15 23:21
马富林 发表于 2013-12-15 22:22
byte c = 1;  c += 1;
那上面的结果中c运算后是被转换成了byte还是int型的?


byte c=1;c+=1;等于c=(byte)(c+1) ;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2