Java中的字节递增操作
当我们尝试使用递增运算符和加法运算符递增字节变量时会发生什么。
public class A{ public static void main(String args[]) { byte b=1; b++; b=b+1; } }
请告诉我哪里可以找到释放这些小东西的来源? 请帮帮我。
区别在于, ++
运算符中有一个从int
到byte
的implicit casting
,而如果你使用b = b + 1
,则必须explicitly
执行此操作
b = b + 1; // will not compile. Cannot cast from int to byte
你需要一个明确的演员: –
b = (byte) (b + 1);
然而, b++
将正常工作。 它( ++
运算符)自动将值b + 1
( int
)转换为一个byte
。
这清楚地列在JLS – §15.26.2化合物分配操作员中 : –
E1 op = E2forms的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,除了E1仅被评估一次
请注意,操作b + 1
将为您提供int
类型的结果。 所以,这就是你需要在第二次任务中进行明确演员的原因。
怎么了? 实际上b = b + 1
将无法编译。
您必须将其显式转换为byte
,因为b + 1
计算结果为int
。 并且不能保证int
可以适合一个byte
。
b = (byte)(b + 1);
变量将递增两次
基础B ++; 和b = b + 1; 是等价的,将导致相同的字节码。
在主方法完成之前,b将等于3。
编辑:实际上它们不等同:b = b + 1; 是错的,应该是b =(byte)(b + 1); [强制转换为一个字节,否则为int]