今天遇到一个奇怪的事,请看下面的代码:byte m = 0;
double n = 1;
m += n; //double型的变量值竟然赋给了byte型的变量结果程序顺利编译了;byte m = 0;
double n = 1;
m += n + 1;这个也可以;
再看下面:
byte m = 0;
double n = 1;
double k = 2;
m += n + k;还有:
byte m = 0;
double n = 1.0;//这回换个正宗的double值
double k = 2.0;
m += n + k;//还是可以编译连它也可以:
byte m = 127;
m++;有哪位高人指点一二.

解决方案 »

  1.   

    JAVA在做数值运算的时候会自动进行类型转换在数值允许的范围内
    但是你不可以把一个大范围的数值赋值给一个小范围的数值没有通过CASTINGdouble d = 1.0;
    byte b = d; (会产生错误)//byte b = (byte)d;byte b = 1;
    double d = b (没有问题)
      

  2.   

    在java中,m += n和m=m+n,还是有一定的区别的,“m += n; //double型的变量值竟然赋给了byte型的变量”是可以的,而如果写成m = n + m;则会报错;这主要是在java中,执行这种语句是,它都会自动先把m转换成n的类型的,然后和n相加,在赋给m……
      

  3.   

    m+=n;这是因为+= 的特性,它自动具有缩窄转换,把double类型转换成byte,
    如果 m = m + n则报错,
      

  4.   

    关于数据 类型,他是有强制转换和自动转换的嘛 ,比如 double -> float -> int 强转  向反就是自动嘛  
      

  5.   

    +=是一个复合赋值操作符,它带隐式转换功能,会自动将计算结果转换为其左操作数类型,当结果类型大于左操作数类型时,就会进行基础类型缩紧转换(narrowing primitive conversion)型如复合赋值表达式 E1 op= E2 就相当于 E1 = (T)((E1) op (E2))
    其中T是E1类型, 除了E1只被计算过一次 
      

  6.   

    强类型转换的语言,低级到高级自动转换,高级到低级强制转换,运算的时候默认int型
    我好想记得是这样