相关疑难解决方法(0)

为什么Java的+ =, - =,*=,/ =复合赋值运算符需要转换?

直到今天,我还以为:

i += j;
Run Code Online (Sandbox Code Playgroud)

只是一个捷径:

i = i + j;
Run Code Online (Sandbox Code Playgroud)

但是如果我们试试这个:

int i = 5;
long j = 8;
Run Code Online (Sandbox Code Playgroud)

然后i = i + j;将不会编译但i += j;将编译正常.

这是否意味着事实上i += j;是这样的捷径 i = (type of i) (i + j)

java casting operators variable-assignment assignment-operator

3547
推荐指数
11
解决办法
28万
查看次数

不同的行为可能会导致精度下降

在Java中,当你这样做

int b = 0;
b = b + 1.0;
Run Code Online (Sandbox Code Playgroud)

您可能会丢失精度错误.但是,如果你这样做,为什么呢?

int b = 0;
b += 1.0;
Run Code Online (Sandbox Code Playgroud)

没有任何错误?

java implicit-cast compound-assignment

30
推荐指数
1
解决办法
2620
查看次数

为什么Java在使用"plus equals"运算符时执行从double到整数的隐式类型转换?

可能重复:
可能导致精度损失的不同行为

代码示例A.

 public class Test {                                                         
     public static void main(String[] args) {
         int i = 0;
         i = i + 1.5;
     }
 }
Run Code Online (Sandbox Code Playgroud)

代码示例B.

 public class Test {                                                         
     public static void main(String[] args) {
         int i = 0;
         i += 1.5;
     }
 }
Run Code Online (Sandbox Code Playgroud)

不出所料,编译A会产生以下错误.令人惊讶的是,编译B不会产生任何错误,并且它看起来像在双值1.5之前插入一个显式转换为整数.为什么世界会发生这种情况?这违背了我认为我知道的一切!

Test.java:6: possible

 loss of precision

    found   : double
    required: int
            i = i + 1.5;
                  ^
    1 error
Run Code Online (Sandbox Code Playgroud)

java

17
推荐指数
1
解决办法
5084
查看次数

+ = b真的等于a = a + b吗?

考虑以下:

int a = 1;
double b = 0.5;
System.out.println(a += b);    // case x
System.out.println(a = a + b); // case y
Run Code Online (Sandbox Code Playgroud)

显而易见的是,上面甚至没有编译 - 由于"不兼容的类型",情况y将失败.如果我自己运行case x,它只会返回一个.

这里发生了什么?简写操作符(+ =)是否"捕获"失败的赋值并且默认只返回lhand值?如果是这样,那么声称a + = b等于a = a + b是否真的是正确的,这在教程中很常见?

java

4
推荐指数
1
解决办法
432
查看次数