Java += 编译器/jre 错误?

标签 java

<分区>

我在使用 java += 运算符时遇到了一些意想不到的事情。

显然,这个编译:

int a = 0;
a += 3/2.0;
System.out.println(a);  // outputs "1"

虽然这不是

int a = 0;
a = a + (3/2.0);   // eclipse compiler error "Type mismatch: cannot convert from double to int"
System.out.println(a);

这是预期的行为吗?我觉得 += 运算符没有报告“类型不匹配”很奇怪,因为它是一个“添加和赋值”运算符,您在其中添加一个 double ,它给出 double 结果,然后分配给一个 int 变量。相反,它会默默地转换(并截断)结果。

最佳答案

这就是 += 在 C 中的工作方式。这是“功能”而不是错误

参见 Java's +=, -=, *=, /= compound assignment operators

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

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

另请参阅我的帖子 http://vanillajava.blogspot.com/2012/11/java-and-implicit-casting.html

关于Java += 编译器/jre 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17041057/

相关文章:

java - 使用反射使用子类获取父类(super class)字段

java - Maven Surefire 与 JUnit 5 隐藏堆栈跟踪

java - 无法以编程方式连接到 mysql

java - 通过 scala.sys.process API 在 spark-scala 中执行外部命令 s3-dist-cp

java - 使用 Context.getApplicationContext() 进行 Android JUnit 测试

Java - 以系统独立的方式将 UTF8 字节从文件读取到字符串中

java - spring3.0注解

java - 使用来自另一个程序的信息

java - 调用父类(super class)中重写的默认接口(interface)方法

java - 为什么异常类型会影响编译和不编译的内容?