当前位置: 首页 > 面试题库 >

为什么在使用“加等于”运算符时Java会执行从双精度到整数的隐式类型转换?

陈刚洁
2023-03-14
问题内容

代码样本A

 public class Test {                                                         
     public static void main(String[] args) {
         int i = 0;
         i = i + 1.5;
     }
 }

代码样本B

 public class Test {                                                         
     public static void main(String[] args) {
         int i = 0;
         i += 1.5;
     }
 }

毫不奇怪,编译A会产生以下错误。 出人意料的是
,编译B不会产生任何错误,并且看起来就像我在double值1.5之前插入显式强制转换为integer一样。为什么在世界上会发生这种情况?这违背了我以为我知道的一切!

Test.java:6: possible

 loss of precision

    found   : double
    required: int
            i = i + 1.5;
                  ^
    1 error

问题答案:

它正在按设计工作。 复合运算符向操作添加隐式转换。否则,您必须使用显式强制转换。

更多信息?

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26.2



 类似资料:
  • 我试图在我的对话框中添加一个总计,但是我得到了一个错误信息,我似乎不能修复它。如果我试图将总计放入for循环中,它会在对话框中打印5次。我确实需要将总计打印在对话框的最后

  • 为什么此代码引发此异常: 线程“main”java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Double 而这个,运行良好: 两者都是尝试将整数转换为双精度,对吗?

  • 问题内容: 为什么会收到错误,我该如何解决? 如您所见,在声明变量时,我已经尝试过用顶部附近的位置进行替换,但是似乎并没有完成任务。 问题答案: 更改使用数组索引从double到INT所有变量(即变量,,)。数组索引是整数。

  • 问题内容: 我有一个双,其值是10,000,000.00(千万)。我必须将其转换为。当使用该方法时,我会得到 “ 1.0E7”,它遵循规范是正确的。不幸的是,我需要“ 10,000,000.00”(或等价的语言,具体取决于语言环境)。 如何做到这一点? 问题答案: 尝试之一 NumberFormat http://java.sun.com/javase/6/docs/api/java/text/N

  • 我试图得到一个double(由两个int的分数得到)作为我下面函数的返回值。 但结果总是错的,我得到的价值如: 预期结果应介于和 我的代码有什么问题! 谢谢

  • 我想用一个小数点和一个小数位的格式将任何双精度四舍五入为双精度,这样29575.347434将是2.3。 我试着用decimalFormat做这个,但当我试着我只得到了一个29575.3格式的字符串,带有一个,我不知道如何在保留值为双精度的同时去掉所有小数点。