日期:2014-05-20  浏览次数:20664 次

一个小程序的问题(关于byte型计算)
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 class test { //觉得可能是因为*和/运算的时候直接内
//部转换成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);
}

}

}
------解决方案--------------------
强制类型转换

a = (byte)(a*2);
------解决方案--------------------
byte(+-*/)之后都转换成int型.你的A变量是byte型.需强制转换
------解决方案--------------------
byte(+-*/)之后都转换成int型.你的A变量是byte型.需强制转换
应该是这个道理的!
但是k4u_fish() 说的那样也能通过编译的,没有强制转换,为什么呢?而把a+=a 换成a=a+a则又会出错,为什么呢?a+=a 和a=a+a 应该是完全等价的啊!
------解决方案--------------------
在这方面+和+=是不等价的
+=已经转换成byte型的了
------解决方案--------------------
2是默认为int型的
所以在进行a=a*2计算时,将进行强制类型转换
------解决方案--------------------
a *= 2;
------解决方案--------------------
a*2就已经是int类型的,需要强制转换成byte的吧
我觉得是这样
不知道对不对
------解决方案--------------------
a=a+b (有自动类型提升)
a+=b (无自动类型提升)
a++(无自动类型提升)

------解决方案--------------------
算出a*2的结果是int型的 把int型赋给byte型当然是错的了