2013-01-05 29 views
2

下面的代碼提供了以下錯誤給錯誤:添加短到2D短數組元素在JAVA

錯誤:C:\用戶\筆記本電腦\ algs4 \你好\ Main.java:8:可能的損耗精密

發現:整數需要

:短

import java.util.* ; 
import java.math.* ; 
import java.io.* ; 
public class Main{ 
    public static void main(String[] args){ 
     short[][] arr = new short[1][2]; 
     short val = 9 ; 
     arr[0][0] = arr[0][0] + val ; 
    } 
} 

但下面給出任何錯誤。

import java.util.* ; 
import java.math.* ; 
import java.io.* ; 
public class Main{ 
    public static void main(String[] args){ 
     short[][] arr = new short[1][2]; 
     short val = 9 ; 
     arr[0][0] += val ; 
    } 
} 

這可能是什麼原因?

回答

3

在下面:

arr[0][0] = arr[0][0] + val ; 

兩個參數是第一晉升爲int,加被執行,並且結果隱含地縮小到short。這可能會導致精度損失,從而導致錯誤。

第二個版本:

arr[0][0] += val ; 

defined by the Java Language Specification等同於

arr[0][0] = (short)((int)arr[0][0] + (int)val); 

換句話說,這表現爲如果有一個明確的轉換,因此沒有錯誤。

您可以通過添加一個顯式的轉換實現的第一個版本相同的效果:

arr[0][0] = (short)(arr[0][0] + val); 
3

嘗試arr[0][0] = (short)(arr[0][0] + val);

arr[0][0] += val ; 

編譯器,使鑄件您

1
import java.util.* ; 
import java.math.* ; 
import java.io.* ; 
public class timous{ 
    public static void main(String[] args){ 
     short[][] arr = new short[1][2]; 
     short val = 9 ; 
     arr[0][0] = (short)(arr[0][0] + val) ; 
    } 
} 

此代碼是不給任何錯誤。 :)