以下代码给出以下错误:
错误: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 ;
}
}
这可能是什么原因?
答案 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) ;
}
}
此代码未给出任何错误。 :)