当前位置: 首页 > article >正文

[Java基础] Integer和int使用注意点

文章目录

  • 1. Integer缓存了-128到127之间的值,不在这个范围,比较值时需要用equals()方法
  • 2. 由于int类型是基本数据类型,Integer拆箱时不能为空

1. Integer缓存了-128到127之间的值,不在这个范围,比较值时需要用equals()方法

  • 在这个范围内,Integer.value(int i) 将返回相同的对象实例。
  • 超出这个范围,每次调用都会创建新的Integer对象。
  • Long也是。
    public static void main(String[] args) {
        // Integer和Long都是缓存在-128~127之间,所以可以直接比较,不用equals
        Integer i1 = 127;
        Integer i2 = 127;
        System.out.println(i1 == i2);
        System.out.println(i1.equals(i2));
        System.out.println("=====");
        Integer i3 = 128;
        Integer i4 = 128;
        System.out.println(i3 == i4);
        System.out.println(i3.equals(i4));
        System.out.println("=====");

        Long ii1 = 127L;
        Long ii2 = 127L;
        Long ii3 = 128L;
        Long ii4 = 128L;
        System.out.println(ii1 == ii2);
        System.out.println(ii3 == ii4);
        System.out.println(ii1.equals(ii2));
        System.out.println(ii3.equals(ii4));
    }

打印

true
true
=====
false
true
=====
true
false
true
true

Integer的equals方法源码

	private final int value;
    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

结论:

通过equals()源码可以看到它是比较的Integer中具体的值,
所以我们如果是比较对象或者比较-128~127的值可以用==,
而如果比较其他的值就需要用equals()了

2. 由于int类型是基本数据类型,Integer拆箱时不能为空

例1

    public static void main(String[] args) {
        // 由于int类型是基本数据类型,拆箱时不能为空
        // 例1
        Integer i5 = null;
        System.out.println(i5 == 3);
    }

报错

在这里插入图片描述

例2

    public static void main(String[] args) {
        // 由于int类型是基本数据类型,拆箱时不能为空
        // 例2
        Integer i5 = null;
        test1(i5);
    }

    public static void test1(int i) {
        System.out.println(i);
    }

在这里插入图片描述

结论:

除了缓存导致比对值可能出现问题之外,
我们熟知的Integer是包装类,可以为null,int是基本数据类型,不可以为null,
在这一点上别忘了包装类拆箱时不能为null的问题。
所有包装类拆箱成基本数据类型时都存在此问题。


http://www.kler.cn/a/374306.html

相关文章:

  • cocos creator 3.x版本如何添加打开游戏时首屏加载进度条
  • 深度学习——神经网络中前向传播、反向传播与梯度计算原理
  • 十个Scala的小知识
  • CPT203 Software Engineering 软件工程 Pt.2 敏捷方法和需求工程(中英双语)
  • AIA - APLIC之二
  • 实际部署Dify可能遇到的问题:忘记密码、开启HTTPS、知识库文档上传的大小限制和数量限制
  • SpringBoot3集成Swagger接口文档功能、接口排序以及如何设置接口页面的title/keyword/description?
  • Ubuntu22.04采用pyenv安装管理多版本python
  • ros2 humble 华硕rgbd xtion驱动
  • git入门教程10:git性能优化
  • 图文深入介绍Oracle DB link(一)
  • JVM性能优化实战手册:从监控到调优策略
  • Linux下docker中elasticsearch与kibana的安装
  • Jenkins面试整理-如何配置 Jenkins Pipeline?
  • 整合 RedisTemplate
  • 点云处理中的多项式重构、平滑与法线估计
  • Android 托管 Github Action 发布 Github Packages ,实现 Mvn 免费自动化托管
  • 解决 ClickHouse 高可用集群中 VRID 冲突问题:基于 chproxy 和 keepalived 的实践分析
  • leetcode - 684. 冗余连接
  • 硅谷甄选(11)角色管理
  • Axure文本框读取和赋值高级交互
  • 计算机毕业设计PySpark+大模型 bilibili弹幕情感分析 B站视频数据可视化 B站爬虫 机器学习 深度学习 NLP自然语言处理 大数据毕业设计
  • 技术分享 | 大语言模型增强灰盒模糊测试技术探索
  • SMO算法 公式推导
  • 由 GPT 引发的这波「大模型热」将会如何洗牌?
  • 直接内存、死锁、方法句柄