我尝试以下的代码:速记操作者给出了两个不同的结果
class Converter{
public static void main(String args[]) {
byte num = 1;
num = num * 2.5; // line 1
System.out.println("Result is : "+num);
}
}
所以编译器发出一个错误为:
error: incompatible types: possible lossy conversion from double to the byte at line 1
在以后,我改变了线1与速记运算符= *:
class Converter{
public static void main(String args[]) {
byte num = 1;
num *= 2.5;
System.out.println("Result is : "+num);
}
}
它的编译和输出成功运行:
Result is:2
我可以知道,简写操作符在JAVA中的工作方式不同。为什么会这样呢?
为什么你认为它would'nt发生?它基本上做'x =(byte)(x * y)'。所以它有一个隐式类型转换。我的意思是第一个错误已经警告过你,当从'double'转换为'byte'时,类型转换会使你失去精确度 – SomeJavaGuy
使用'javap -v Converter.class'来查看第二种情况发生了什么。请特别注意d2i和i2b指令:) – TheLostMind
所以我可以这么说速记运算符能够抑制有损转换错误,并且只是简单地做了什么输入呢? – Kamalakar