java中 单独编译为什么会报错

byte b=10;
b=b+10;
System.out.println(b);

java是一种强类型语言,运算时,转换的一般原则是位少的类型转换为位数多的类型;10 是int 类型,32位,和byte类型8位相加,结果是int 类型的,可以这样 :b = (byte) (10 + b);

要么b=(byte)(b+10);要么int b = 10;
b + 10,因为后面的10被当作整数,所以表达式的结果也是整数,而没有整数到byte的隐式类型转换,所以编译错误。

这已经转化成byte类型和int类型之间的转换问题了。这个自己再看看吧。

后面计算 默认成Int类型了

你应该考虑一下不同类型之间的转换问题,四楼说的很对

你应该考虑一下不同类型之间的转换问题,四楼说的很对

类型转换的问题,你第二句话已经隐形将数据类型转换了

在Java中,与数字有关的数据类型为:字节型(byte)->短整型(short)->整型(int)->长整型(long)->浮点型(float)->双精度型(double)
从左往右字节位数依次递增,在类型转换时可以从字节位数低的直接自动的转换到字节位数高的数据类型。
在你代码中的第二句b=b+10;中却把右侧表达式的整数结果赋给了byte,所以报了数据转换错误。解决方案就是强制类型转换:b = (byte) (b + 10);

如果答案满意,望采纳!

属于强制类型转换和自动类型提升概念,建议楼主看看这方面的知识。
byte b=10;
b=b+10;
System.out.println(b);
跟前面的各层楼前辈说的一样,b=b+10;结果已经转换成了int类型了,而第一行设置的是byte类型:byte b = 10;所以最后输入,
如果要为byte,那么需要进行强制类型转换b = (byte)(b + 10);否则就是int类型的(自动类型提升了).

byte,short,int,long,范围一个比一个大,b+1默认是转换层Int型的,而Java中有向上转型,没有向下转型,int不能转成byte,所以b=b+1会报错,

b +10; // 会自动类型转换到int

b = b + 10; // 不能将int类型的(b + 10)自动类型转换为byte类型的b。需强转

byte b=10;
byte 范围是-128--127 ,也就是说:byte也是整型,只是它的范围比int型的小。所以byte b=10是对的。

b=b+10;
因为b+10中的b是byte类型,10是 int。而你要赋给byte类型。肯定报错了。简单的说就是你把范围大的 int赋给范围小的byte类型。

希望一楼的采纳,给个好评。