相关疑难解决方法(0)

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

在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 int + =双语法惊喜

我遇到了以下令人惊讶的问题:

int x = 7;
x += 0.5;
Run Code Online (Sandbox Code Playgroud)

显然是合法的语法!添加后,X仍然是7,所以双被转换为int并四舍五入到0,但这是没有代码中的任何显式转换完成.有人对此感到惊讶吗?这里的理由是什么?

编辑以澄清我的问题:任何人都可以给出这个决定的充分理由吗?我觉得这是一个可怕的决定,要求在其他任何地方进行显式投射,但是在你默默抛弃数据的语言中有这一点.我错过了什么吗?

java syntax int operators

8
推荐指数
1
解决办法
2036
查看次数

+ = 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
查看次数