不等价的
x+=1.0;这个过程中没有类型转换的
x=x+1.0f;就有一个先转化成doulble的过程类似的是
short a=(short)1;
short b;
b=a+b;//错误
b+=a;//正确

解决方案 »

  1.   

    好像java的这个+自动的把精度给提高了,怎么回事。
      

  2.   

    确实是提高了
    基本运算会以最高精度的数字为基准来进行计算
    深入地看就是
    int i=1;
    long j=1L;
    i+j//注意这句
    jvm首先把i的符号位拿出,然后再在高位添32个0,然后再把符号位放在最高位
    这时候i,j在积存器中都是64位的了,然后相加保存,那么jvm肯定不会自动地去掉除符号位之外的高位的0,所以得到的结果就是64位的long了
      

  3.   

    int num = 1;
    double db = 2.2;
    long l = 23123123l;
    String test = "test"+num;System.out.println(test);
    System.out.println(db+num);
    System.out.println(l+db);
    +运算符用于不同基本类型数据时,自动将输出结果转为运算中高精度的类型
      

  4.   

    一个高手告诉我的猜测,好象能解释这个问题的.
    x=x+1.0;//可以理解为:x=(float)(x+1.0)包括其他的扩展赋值运算符还有++,--都可以这样理解
    byte x=1;
    x=x+1;//错误byte x=1;
    ++x;//正确,可以理解为x=(byte)(x+1);