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

时间:2018-05-17 13:25:23

标签: 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,这是公平的。

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

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

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

1 个答案:

答案 0 :(得分:1)

在第一个代码中,您将为整数变量赋值。因为double值需要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)或Parsing ,并将函数的返回值转换为int汇编。所以它工作正常。我希望你明白。谢谢!