Java + =编译器/ jre错误?

这个问题在这里已经有了答案:

  • 为什么Java的+ =, - =,* =,/ =复合赋值操作符需要转换? 11个答案

  • 这是+ =从C开始工作的方式。 这是“功能”而不是bug

    请参阅Java的+ =, - =,* =,/ =复合赋值运算符

    顺便说一句你可以试试这个

    char ch = '0';
    ch *= 1.1; // ch = '4'
    

    另见我的博文http://vanillajava.blogspot.com/2012/11/java-and-implicit-casting.html


    int a = a + (3/2.0); 因为:

  • int + double导致一个double
  • a被引用为int
  • double投掷到int缺失
  • int a += 3/2.0; 编译以来:

  • int + double导致一个double
  • a被引用为int
  • double可以转换为int ,幸运的是,编译器添加了一个隐式类型转换,类似于:

    int a = (int)(a+ 3/2.0); 。 这是由于特殊的op=符号,它比编译器的基本赋值运算符: =更聪明。


  • 这不是一个错误,它发生了一个隐式转换。

    例如。

    Byte b=3;
    
    b+=5;  //compiles
    
    b=b+5; //doesnt compiles
    

    这里发生的事情是

    a=a+3/2.0;   // 3/2.0 produces double , it add int to double but cant convert it implicitly to int.
    
    a += 3/2.0;  // here implicit conversion after addition of a to 3/2.0 happends from double to int
    
    链接地址: http://www.djcxy.com/p/73651.html

    上一篇: Java += compiler/jre bug?

    下一篇: Why does Java perform implicit type conversion from double to integer when using the "plus equals" operator?