在JAVA中添加一个短的二维短数组元素给出错误

时间:2013-01-05 16:30:55

标签: java

以下代码给出以下错误:

错误:C:\ Users \ Laptop \ algs4 \ hello \ Main.java:8:可能丢失精度

发现:int

必填:短

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 个答案:

答案 0 :(得分:3)

尝试arr[0][0] = (short)(arr[0][0] + val);

arr[0][0] += val ;

编译器为你做演员

答案 1 :(得分: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); 

答案 2 :(得分: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) ; 
    }
}

此代码未给出任何错误。 :)