java中从double到int的可能有损转换错误

java中从double到int的可能有损转换错误,java,operators,Java,Operators,我们已经知道java中Math.lang()函数的返回类型是double class Lossy { public static void main(String args[]) { int sum; sum=Math.pow(2,3); System.out.println (sum); } } 现在,此语句导致可能的有损转换错误,因为变量的类型为int,并且Math.pow()返回一个double值,即8.0,这很公平 现在查

我们已经知道java中
Math.lang()
函数的返回类型是
double

class Lossy {
    public static void main(String args[]) {
        int sum;
        sum=Math.pow(2,3);
        System.out.println (sum);
    }
}
现在,此语句导致可能的有损转换错误,因为变量的类型为int,并且
Math.pow()
返回一个
double
值,即
8.0
,这很公平

现在查看下面的代码,并进行一些更改

class Lossy {     
    public static void main(String args[]) {
        int sum=2;
        sum+=Math.pow(2,3);
        System.out.println (sum);
    }
}

现在,如果我们编译这段代码,我们不会得到一个可能的转换错误,我们应该得到这个错误,因为我们在一个
整数
变量中存储了一个双精度值。此外,当我们打印值时,它会显示一个整数值。为什么?

在第一个代码中,您为整数变量指定了一个双精度值。因为double value需要8个字节,而integer只需要4个字节的内存。我们无法将8字节的值存储到4字节变量中。这就是为什么它显示可能的转换错误丢失

class Lossy
  {
   public static void main(String args[])
  {
    int sum;
    sum=Math.pow(2,3);   //Assigning double value to a int variable. its an Error
    System.out.println (sum);
 }
 }
在第二个示例中,您不是简单地或直接地将值赋给整型变量。但是您使用了add and assign操作符(+=),其功能如下:

sum+=Math.pow(2,3)等于sum=sum+Math.pow(2,3)


如果您喜欢上面的方法,JVM会对函数Math.pow()执行自动类型转换(double to int)或解析,并在编译时将函数的返回值转换为int。所以它工作得很好。我希望你能理解。谢谢

但我认为java中不允许从double隐式转换为int。请浏览以下链接以供参考:-