class test2
{
public static void main(String[] args)
{
byte a=1;
int i;
for(i=0;i<=8;i++)
{
a=a*2;
System.out.println("The output is"+a);
}
}
}结果显示:
test2.java:9: possible loss of precision
found :int
required: byte
a=a*2;
1 error求教各位应当怎么解决?
{
public static void main(String[] args)
{
byte a=1;
int i;
for(i=0;i<=8;i++)
{
a=a*2;
System.out.println("The output is"+a);
}
}
}结果显示:
test2.java:9: possible loss of precision
found :int
required: byte
a=a*2;
1 error求教各位应当怎么解决?
//部转换成int了,所以没有办法计算。
//但是换成+就没有这个问题
public test() {
} public static void main(String[] args)
{
byte a=1;
int i;
for(i=0;i<=8;i++)
{
a += a; //因为a*2 = a + a,这样就没有问题了
System.out.println("The output is"+a);
} }}
应该是这个道理的!
但是k4u_fish() 说的那样也能通过编译的,没有强制转换,为什么呢?而把a+=a 换成a=a+a则又会出错,为什么呢?a+=a 和a=a+a 应该是完全等价的啊!
+=已经转换成byte型的了
所以在进行a=a*2计算时,将进行强制类型转换
我觉得是这样
不知道对不对
至于gongyali2005() 说的为何“+=已经转换成byte型的了”这个没有弄明白,为何+=就能自动转换成byte型的呢?
a+=b (无自动类型提升)
a++(无自动类型提升)