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求教各位应当怎么解决?

解决方案 »

  1.   

    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);
            }    }}
      

  2.   

    强制类型转换a = (byte)(a*2);
      

  3.   

    byte(+-*/)之后都转换成int型.你的A变量是byte型.需强制转换
      

  4.   

    byte(+-*/)之后都转换成int型.你的A变量是byte型.需强制转换
    应该是这个道理的!
    但是k4u_fish() 说的那样也能通过编译的,没有强制转换,为什么呢?而把a+=a 换成a=a+a则又会出错,为什么呢?a+=a  和a=a+a 应该是完全等价的啊!
      

  5.   

    在这方面+和+=是不等价的
    +=已经转换成byte型的了
      

  6.   

    2是默认为int型的
    所以在进行a=a*2计算时,将进行强制类型转换
      

  7.   

    a*2就已经是int类型的,需要强制转换成byte的吧
    我觉得是这样
    不知道对不对
      

  8.   

    这个问题我想明白了,在进行各种不同数据类型计算时,一般都会转换为32bit来做,long类型除外吧,是64bit的,而当我先定义一个字节型的变量a,用它做运算的时候它会自动转换为int型,而再将结果赋值给a时,必须先转换成a的类型,即byte型才可以赋值。
    至于gongyali2005() 说的为何“+=已经转换成byte型的了”这个没有弄明白,为何+=就能自动转换成byte型的呢?
      

  9.   

    a=a+b (有自动类型提升)
    a+=b (无自动类型提升)
    a++(无自动类型提升)
      

  10.   

    算出a*2的结果是int型的 把int型赋给byte型当然是错的了