2013-01-05 30 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) ; 
    } 
} 

此代码是不给任何错误。 :)