本人是新手,在学习java的过程中,发现一个问题,不得其解,请教各位大神
先上问题:
class Demo
{
public static void main(String[] args)
{
byte a=1;
byte b=3;
byte c=a;
c=c+b;
System.out.println(c);
}
}
/*
编译结果:
---------- JAVAC ----------
Demo.java:8: 错误: 可能损失精度
c=c+b;
^
需要: byte
找到: int
1 个错误
*/
但是如果把代码写成:
class Demo
{
public static void main(String[] args)
{
byte a=1;
byte b=3;
byte c=a;
c+=b;
System.out.println(c);
}
}
/*
编译结果:
---------- JAVAC ----------
输出完成 (耗时 0 秒) - 正常终止
*/
那么问题就来了, c=c+b 与 c+=b 难道有什么区别吗?结果上是没有区别,但是在编译过程中却有区别,区别在哪呢?
------解决方案--------------------
"+"是逻辑运算符,在做byte之间做运算时,如 c = c+b,c+b的运算结果的数据类型会自动转换为了int类型
想将int类型转换为byte类型,就会报错:只有 c = (byte)(c+b);就不会出错;
c += b;这个运算的,数据类型是以 c的数据类型为标准的。所以不需要转换。
------解决方案--------------------
+=有自动转换的功能 将 int 转换为byte