当我们尝试使用递增运算符和加法运算符递增字节变量时会发生什么。
public class A{
public static void main(String args[])
{
byte b=1;
b++;
b=b+1;
}
}
请告诉我哪里可以找到释放出这么小的东西?请帮帮我。
答案 0 :(得分:10)
差异就是implicit casting
运算符中++
从int
到byte
,但是,您必须如果您使用explicitly
b = b + 1
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 Compound Assignment Operators明确列出了这一点: -
形式E1 op = E2的复合赋值表达式是等价的 到E1 =(T)((E1)op(E2)),其中T是E1的类型,除了E1 仅评估一次
请注意,操作b + 1
会为您提供int
类型的结果。所以,这就是你在第二次任务中需要明确演员的原因。
答案 1 :(得分:3)
会发生什么?实际上b = b + 1
将无法编译。
您必须明确将其转换为byte
,因为b + 1
的评估结果为int
。并且无法保证int
可以放入byte
。
b = (byte)(b + 1);
答案 2 :(得分:0)
变量将递增两次
答案 3 :(得分:0)
基础B ++;和b = b + 1;是等价的,将产生相同的字节码。
在主方法完成之前,b将等于3。
编辑:实际上它们不等同:b = b + 1;是错的,应该是b =(byte)(b + 1); [强制转换为字节,否则为int]