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

Java Integer的数值比较

文章目录

  • 环境
  • 问题
  • 答案
  • 说明
  • 解决办法
  • 其它
  • 总结

环境

  • Windows 11 专业版
  • Java 21

问题

下面这段代码的运行结果是什么?

        Integer i1 = 0;int i2 = 0;for (int n = 0; n < 200; n++) {if (i1 != i2) {System.out.println("i1 = " + i1 + ", i2 = " + i2);break;}i1++;i2++;}Integer i3 = 0, i4 = 0;for (int n = 0; n < 200; n++) {if (i3 != i4) {System.out.println("i3 = " + i3 + ", i4 = " + i4);break;}i3++;i4++;}

答案

运行结果如下:

i3 = 128, i4 = 128

说明

Integer 是一个引用类型,它包装了基本(primitive)数据类型 int 。对于Integer类型,在 -128127 这个区间的值,Java会将其缓存起来。

所以,当使用 == 比较两个Integer对象时:

  • 如果它们的值在这个缓存区间内,实际上比较的是缓存中的同一个对象,所以表现为比较数值。
  • 当Integer对象的值大于127或者小于-128时,每次创建Integer对象都是一个新的对象, == 比较的是对象的引用,而不是对象所包装的数值。

如果是Integer和int做数值比较,那么Integer会自动拆箱(unboxing)为int,所以可以直接用 == 来比较。

注:要留意Integer对象为null的情况。

解决办法

要对Integer做数值比较:

  • equals() :Integer类重写了Object类的equals()方法,用于比较两个Integer对象所包装的数值是否相等。
  • intValue() :直接转换为int类型

其它

需要注意的是,如果使用了 List 等数据结构,其中的元素都是对象,例如:

list1.add(1234);

它会自动装箱(boxing),实际存储的元素是Integer类型。如果要对List里面的元素做数值比较,别忘了转换为int类型。

总结

  • Integerint 做比较时,可以直接用 == 来判断
  • IntegerInteger 做比较时,最好用 equals() 方法做比较,或者转化为 intValue() 进行数值比较
  • 集合里存储的都是 Object ,对于 int 数值会自动装箱为 Integer ,在读取元素时,别忘了是 Integer 类型的,若要比较数值,最好转换为int类型
http://www.lryc.cn/news/502325.html

相关文章:

  • QGroundControl之5-AppSettings.cc
  • Django Fixtures 使用指南:JSON 格式详解
  • 单元测试SpringBoot
  • 邮件营销平台应如何提升外贸开发信的效果?
  • 绘制折线图遇到问题记录
  • python 调Qt C++ 写法配置和坑点
  • css设置透明的几种办法
  • 刷题日志【4】
  • 如何制作自己的字体文件.ttf
  • gradle在IDEA 中无法使用的启动守护线程的问题
  • Spring Boot 配置多数据源并手动配置事务
  • YashanDB 23.2 YAC 共享集群部署和使用自带YMP迁移工具进行数据迁移,效果很city
  • 【数学】矩阵的逆与伪逆 EEGLAB
  • 狐猬编程 C++ L3 第7课 字符串入门 元音字母
  • APP UI自动化测试的思路小结
  • 2412d,d的7月会议
  • ANOMALY BERT 解读
  • 定时/延时任务-Netty时间轮源码分析
  • React的一些主要优点是?
  • RabbitMQ 基本使用方法详解
  • [leetcode100] 101. 对称二叉树
  • Vue.createApp的对象参数
  • 短信验证码burp姿势
  • ubuntu WPS安装
  • 中粮凤凰里共有产权看房记
  • 学习笔记068——Hibernate框架介绍以及使用方法
  • Maven 安装配置(详细教程)
  • 虚幻开发中的MYPROJECTFORPLUG_API
  • 顺序栈及其实现过程
  • 内圆弧转子泵绘制工具开发