包装类型之间一律使用equals来判断值是否相等
包装类型是引用类型,所以使用==是不能比较包装类型对象包含的值是否相等,==只是比较两个引用变量是否指向相同的对象。
由于在jdk1.5之后,支持自动装箱功能,对于Integer会出现下面这种情况:
Integer a = 1;
Integer b = 1;
System.out.println(a == b);// true
上述代码中,a == b 结果为true,这只是一个假象,让人误以为可以使用==来比较Integer对象的值是否相等,其实a和b引用的是同一个Integer对象,所以a == b 才会返回true。
那为什么a与b会引用同一个Integer对象呢?
当使用自动装箱方式创建一个Integer对象时,当数值在-128 ~127时,会将创建的Integer对象缓存起来,当下次再出现该数值时,直接从缓存中取出对应的Integer对象。所以上述代码中,a和b引用的是相同的Integer对象。
总结:
1.所有包装类型一律使用equals方法比较值是否相等;
2.所有引用类型,当使用==运算符时,比较的是两个引用类型变量是否指向相同的对象;
3.要比较引用类型变量的成员变量值是否相等,要使用equals方法。
关于Integer更详细的使用,见如下代码:
public class TestWrapperClass {public static void main(String[] args) {Integer integer1 = new Integer(1);Integer integer2 = new Integer(1);System.out.println(integer1 == integer2);Integer integer3 = 1;Integer integer4 = 1;System.out.println(integer3 == integer4);System.out.println(integer1 == integer4);Integer integer5 = 128;Integer integer6 = 128;System.out.println(integer5 == integer6);}
}
包装类型之间一律使用equals来判断值是否相等相关推荐
- java integer引用传递_在java中String,对象,Integer(包装类型的)关于引用传递还是值传递...
场景: 大家都知道基本的数据类型,int,float等等这种是按值传递的.但是对于String,对象,Integer是怎样传递呢? 原理知识: 如果参数类型是原始类型,那么传过来的就是这个参数的一个副 ...
- 在字符串String类型常忘记使用equals()进行值比较的问题
String[] arr = {"zhangsan","lisi","wangwu"};int num = 0;String name = ...
- 《JavaScript高级程序设计(第四版)》红宝书学习笔记(第五章:基本引用类型,原始值包装类型,单例内置对象)
第五章:基本引用类型 引用值(或者对象)是某个特定引用类型的实例.新对象通过使用new操作符后跟一个构造函数(constructor)来创建. 5.1 Date 这里不对Date进行详细深入,仅基于书 ...
- 基本与包装类型全面对比
基本类型与包装类型的区别 前言 区别 前言 java的每个基本类型都对应一个包装类型,比如说,java的int类型包装类型为Integer,double的包装类型是Double.基本类型和包装类型的区 ...
- 深入理解基本包装类型
:点上面关注免费学习前端知识! 为了便于操作基本类型值,ECMAScript还提供了3个特殊的引用类型: Boolean . Number 和 String .这些类型与本章介绍的其他引用类型相似,但 ...
- 13.包装类型应用及场景
包装类型应用及场景 1.包装类型 Java中提供了8种基本数据类型以及对应的8中包装类型.Java是一种面向对象编程的高级语言,所以包装类型正是为了解决基本数据类型无法面向对象编程所提供的. 基本数据 ...
- 【JavaScript】9.基本引用类型-原始值包装类型
本篇笔记示例代码仓库:https://github.com/zhangtuo1999/study-js . 本篇笔记遵循中文技术文档的写作规范. 主要内容来源于<JavaScript高级程序设计 ...
- 0717 抽象类/接口/异常/==-equals()/搜索字符串/包装类型(统计字符数)/hashCode()/StringBuffer/pingSQL/2018年美式日历
抽象类与接口 什么是抽象类? 有一些类没有必要实例化,实例化没有意义,它可以封装通用 的业务代码 Animal -- 没有必要实例化 Dog Cat Fish ... 抽象 ...
- 为什么包装类型间的相等判断应该用 equals
为什么包装类型间的相等判断应该用 equals 大家都知道 java 中 == 和 equal 的区别, == 操作比较的是两个变量的值,对于引用型变量是判断变量是否指向同一引用对象,比地址. equ ...
最新文章
- 字节码学院全栈学习笔记
- 什么是生成模型和GAN?一文体验计算机视觉的魔力
- 一张照片就能生成3D模型,GAN和自动编码器碰撞出奇迹,苏黎世联邦理工学院出品...
- matlab拟合双自变量双指数函数曲线,怎样用MATLAB拟合两个自变量的函数系数和指数?...
- 安卓9.0刷linux,Ubuntu系统下编译Android 9.0系统
- List-ArrayList 使用
- 零基础学Python(第十五章 日期时间datetime、time、Calendar)
- 最大公约数,最小公倍数,质因式分解
- nginxlua文件服务器权限,通过lua进行nginx的权限控制
- Spring Boot 最佳实践(二)集成Jsp与生产环境部署
- python实例变量命名规则_Java,Python的一些命名规范
- 电话聊天狂人(25 分)(散列函数)
- php微信显示通讯录,微信小程序通讯录功能实现思路分享
- 分布式技术(2)大型网站架构利器-CDN技术
- 2022-2028年中国位置大数据行业市场专项调查及投资前景分析报告
- CBR编码与VBR编码
- Unity Gyro之使用陀螺仪实现简单VR全景环视效果
- vscode 管理员权限 运行终端
- 《算法竞赛入门经典》(第二版)代码及详细解释(持续更新!)
- DatePicker时间格式化年月日