我嘗試以下的代碼:速記操作者給出了兩個不同的結果
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