byte a=1,b=1;
a=a*b;
System.out.println(a);
结果编译器说损失精度..奇怪 将 a=a*b换成a*=b就可以了;为什么呢

解决方案 »

  1.   

    后者隐式转换类型了(to byte)
      

  2.   

    前者是按默认的(int)来运算,
    后者是由前面的A的类型决定的
      

  3.   


    a*=b = (byte)(a * b)
      

  4.   

    嗯,具体的解释可以看看Java Language Specification的15.26.2的说明http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.26.2
      

  5.   

    a=a*b是按JAVA虚拟机默认的(int)来运算, 
       a*=b是由前面的a的类型决定的
               这是一个很基础的类型转化的问题.
      

  6.   

    前者是按默认的(int)来运算, 
    后者是由前面的A的类型决定的
      

  7.   

    byte   a=1,b=1; 
    a=(byte)(a * b);
    System.out.println(a); 
      

  8.   

    byte类型之间进行计算后会自动增长类型为int
    a*b后的类型为int,将它赋值给a(byte型)当然会报错.
    但是 a*=b 就不存在类型自动增长的问题了.