我们已经知道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值。而且,当我们打印该值时,它显示一个整数值。为什么呢?
答案 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汇编。所以它工作正常。我希望你明白。谢谢!