• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

奋斗的软件工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

Java 中数值运算与比较


package com.biwu.demo;

public class App {
    public static void main(String[] args) {
        double a = 0.1, b = 0.2, c = 0.3;
        System.out.println(a + b == c);

        Integer i = 100, j = 100;
        System.out.println(i == j);

        Integer p = 200, q = 200;
        System.out.println(p == q);
    }
}

💡解答
以下是对这段代码的逐步分析:

首先,对于 double a = 0.1, b = 0.2, c = 0.3; System.out.println(a + b == c); 这部分:

在 Java 中,由于浮点数的精度问题,0.1 和 0.2 在计算机中存储的实际值并不是精确的 0.1 和 0.2 ,当它们相加时,结果也不是精确的 0.3 。所以,直接比较 a + b 是否等于 c ,结果通常是 false 。

接下来,对于 Integer i = 100, j = 100; System.out.println(i == j); 这部分:

在 Java 中,对于值在 -128 到 127 之间的整数,Java 会对其进行缓存。100 在这个范围内,所以当创建 Integer 对象 i 和 j 并赋值为 100

时,实际上引用的是同一个缓存对象。因此,使用 == 比较时,结果为 true 。

最后,对于 Integer p = 200, q = 200; System.out.println(p == q); 这部分:

200 超出了 -128 到 127 的范围,所以创建的 Integer 对象 p 和 q 是两个不同的对象。使用 == 比较两个不同的对象的引用,结果为 false 。

在 Java 中,对于 -128 到 127 之间的整数,为了提高性能和节省内存,Java 会将这些整数进行缓存。当创建新的 Integer 对象并赋值在这个范围内时,

如果已经存在相同值的缓存对象,就会直接引用已有的缓存对象,而不是重新创建新的对象。这样可以减少对象的创建和销毁,提高程序的运行效率。

posted on 2024-08-02 10:42  周政然  阅读(16)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3