Java包装类型对象比较相等性注意事项
废话不多说看代码:
Integer a = 100;
Integer b = 100;
a == b 表达式结果为true
a.equals(b) 表达式结果为trueInteger a = 1000;
Integer b = 1000;
a == b 表达式结果为false
a.equals(b) 表达式结果为true
为什么?
包装类型不应该使用“==”运算符比较其值是否相等,因为它比较的是地址。比较引用类型的变量所指向的值是否相等请使用equals方法。
既然比较的是地址,那么为什么上半部分成立而下半部分不成立?
在上半部分中,a和b是同一地址。因为自动装箱规范要求boolean、byte、char <= 127、介于-127到128之间的short和int被包装到固定的对象中,也就是说:上半部分的a和b都被包装在了一个对象中,所以它们的地址相同。
所以在下半部分,a和b的值都大于上述规定,被包装在了不同的对象中,所以表达式“a == b”比较它们的地址其表达式结果为false。
请记住:比较引用类型的变量所指向的值是否相等使用equals方法。
还要记住:自动装箱规范要求boolean、byte、char <= 127、介于-127到128之间的short和int被包装到固定的对象中。
参考了《Java核心技术 第11版 卷一》
Java包装类型对象比较相等性注意事项相关推荐
- 一分钟理解Java包装类型
转载自 一分钟理解Java包装类型 Java 一直标榜自己是一个纯粹的面向对象语言,自作聪明的为所有的值类型都提供相应的引用类型(不明白这两个概念,看之前的<一分钟理解传值和传引用>)比 ...
- Java 包装类型的缓存机制
Java包装类型的缓存机制 Integer 缓存机制 背景 Integer 最常见的面试题,就是问Integer的值如何比较相等.比如: Integer i1 = 33; Integer i2 = 3 ...
- JS中数据类型、内置对象、包装类型对象、typeof关系
平时在复习JS基础知识时,经常会遇到JS数据类型.基础数据类型.内置对象.包装类型对象,检测数据类型时,用到的typeof值,感觉都差不多,但是又有差异.今天特地整理下,方便理解. JS数据类型 基础 ...
- java 包装类型_2.Java基本类型与包装类型
java中的基本类型包含以下几个: byte.short.int.long.float.double.char.boolean 整型 其中byte.short.int.long都是表示整数的,只不过他 ...
- java包装类型作用,和基本类型区别
Java中的8种基本数据类型都有对应的对象类型,但是既然有了基本数据类型,包装类型有什么作用呢?它们有什么区别呢? 答案是包装类型的出现是为了方便对基本类型进行操作.包装类型可以解决一些基本类型解决不 ...
- JAVA包装类型缓存池详解
前言:我们知道,缓存一些常用的数据能提高程序的运行效率,而在Java中,Java给一些基本类型提供了一个缓存池,缓存池中已经提前存进去了一些元素,提高数据的读取速度.在此之前,先了解一下Java的自动 ...
- java包装类型 “==”的比较(如Integer,Double)
大家在平常写代码时对于简单类型int,double等变量的值进行比较的时候一般会用"== "来比较两个值是否相等,对于简单类型来说这个比较没什么问题,但是如果是包装类型,比如说In ...
- java integer比较大小_Integer 类型对象之间大小比较
一.Integer 类型对象之间大小比较 1. 使用 new Integer() 创建的对象 : 首先,我们知道,在java中,基本类型之间是可以做大小比较的,例如int i=1,int j=2,是可 ...
- java包装类有几种_Java包装类型有几种
Java包装类型有8种,分别是:1.Byte:2.Integer:3.Short:4.Long:5.Float:6.Double:7.Boolean:8.Character. [相关学习推荐:java ...
最新文章
- T75 大数加法+取模
- php无表单上传文件,php – 如何使用没有实体类的表单上传文件
- Java程序员从笨鸟到菜鸟之(一)开发环境搭建,基本语法,字符串,数组
- 直播预告:基于动态词表的对话生成研究 | PaperWeekly x 微软亚洲研究院
- 启动SecureCRT出现ImportError: No module named _sysconfigdata_nd
- Python把列表中的数字尽量等分成n份
- 个人优盘更新涉密计算机病毒库,在涉密计算机和非涉密计算机之间交叉使用优盘、移动硬盘等移动存储介质时,只要及时升级杀毒软件病毒库,就不会造成泄密 - 作业在线问答...
- dalvik虚拟内存管理之二——垃圾收集
- centos7只安装mysql客户端
- 解析数论导论中的符号
- C# - 此应用无法在你的电脑上运行
- 按键精灵的5级开发认证,笔试题参考
- XXL分布式任务调度平台
- 戳这里,誉天胡老师教你如何备考 HCIE-Datacom!考试通关so easy!
- 可扩展的交互式可视化框架,用于衡量新闻中的性别偏见
- yapi文档转换jmx脚本
- Arduino RGB颜色渐变代码(附上C语言版本)
- 什么是前端渲染和后端渲染和SPA页面
- vue根据不同权限显示图片_vuex根据不同的用户权限展示不同的路由列表
- 围圈报数c语言编程,C语言编程:有n个人围成一圈,顺序排号。从第一个人开始报数......
热门文章
- mysql写入 cpu飙升_分析MySQL中索引引引发的CPU负载飙升的问题
- vgh电压高了有什么_一文告诉你电压互感器的作用是什么?
- java 二阶段提交,二阶段提交协议(Two Phase Commitment Protocol)
- Web前端笔记-2D图形平面内平移定位(two.js)
- Python笔记-flask执行后台程序(非web应用)
- Spring Boot中登录错误消息的显示
- Linux学习笔记-消息队列的打开、创建、控制
- C++工作笔记-模版中class更新为typename
- 数据结构-线性相关代码
- linux如何脚本监控tps,通过shell脚本监控日志切换频率