千家信息网

java中为什么int==Integer为true

发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,本篇内容介绍了"java中为什么int==Integer为true"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能
千家信息网最后更新 2024年09月23日java中为什么int==Integer为true

本篇内容介绍了"java中为什么int==Integer为true"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

int==Integer为什么返回true

先看现象吧

执行下面的代码及输出结果:

int a = 1;Integer b = 1;Integer c = new Integer(1);System.out.println(a==b);//trueSystem.out.println(a==c);//trueSystem.out.println(b==c);//false

通常大家对此的解释是,==对于基本类型来说比较的是值,对于引用类型来说比较的是引用,即指向的对象的内存地址。这样解释没错,b==c结果为false毋庸置疑,因为两个都是引用类型。但是为什么a==b(a==c)一个是基本类型一个是引用类型,比较的时候还是值比较呢?

这个时候我们不妨把.java源文件编译后的.class文件使用反编译工具反编译成源码,看看虚拟机内部是如何处理a==b的。

.class文件使用jd-gui反编译后的:

int a = 1;Integer b = Integer.valueOf(1);Integer c = new Integer(1);System.out.println(a == b.intValue());System.out.println(a == c.intValue());System.out.println(b == c);

看到这想必大家都明白了吧,其实基本类型a和引用类型b比较时,引用类型b调用自身的intValue()方法获取Integer实际表示的int类型的值,即a == b.intValue()还是两个int类型的变量进行值比较。符合上述:==对于基本类型来说比较的是值,对于引用类型来说比较的是引用,即指向的对象的内存地址。

基本类型及引用类型在内存中的存储方式

说到这,还要解释下为什么两个引用类型的值一样而引用不一样以及基本变量为什么是值比较。

其实基本变量int a在内存里只有一份,保存在栈(保存基本类型的变量数据及引用类型的引用)中,Integer b和Integer c中的int值都指向栈中同一个int,不会重新在栈中创建相同的int值。

而对于Integer b和Integer c,其实例是保存在堆(保存所有new出来的对象)中,虽然表示的int值相同,但是在堆中有两份,每次new都会在堆中开辟一片空间保存new的内容,故Integer b和Integer c分别在两片不同的内存空间存储,所以指向的内存地址不同。

而对于Integer b = 1;其反编译后为Integer b = Integer.valueOf(1); 而valueOf()方法内部是调用了new。

JDK中Integer.valueOf()源码:

public static Integer valueOf(int i) {        if (i >= IntegerCache.low && i <= IntegerCache.high)            return IntegerCache.cache[i + (-IntegerCache.low)];        return new Integer(i);}

"java中为什么int==Integer为true"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

类型 内存 编译 变量 指向 两个 内容 地址 对象 解释 不同 相同 实际 文件 方法 时候 更多 源码 知识 空间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 桐乡到贵州经过的服务器有几个 广州数客网络技术有限公司 电脑连接手机导出数据库 网络安全教育测试题答案 国家网络安全研究院是什么单位 中软入职网络安全考试 木马由服务器和谁组成 网络安全考研大学有哪些专业 软件实现与软件开发的区别 双十一怎么设置网络安全 控制面板卸载数据库 网络技术促进社会进步 软件开发的行业应用及其模式 绝地求生用哪个服务器 网络安全作业安全第一课 崩坏3华为服务器 服务器一刷新就会更快的进入游戏 怎么设置服务器管理 瑞海网络技术 河南金蝶财务软件开发 至融网络技术 重庆大数据时间频率同步服务器 广东新一代软件开发服务应用 网络安全知识竞赛获奖证书查询 查看服务器内存型号 网络安全结尾作文 删数据库跑路犯法吗 函授软件开发毕业后收入多少 微信小程序服务器语言是什么 腾讯服务器地址
0