Java中为什么1000==1000为false而100==100为true
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,本篇内容介绍了"Java中为什么1000==1000为false而100==100为true"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情
千家信息网最后更新 2025年11月11日Java中为什么1000==1000为false而100==100为true
本篇内容介绍了"Java中为什么1000==1000为false而100==100为true"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
如果你运行下面的代码
Integer a = 1000, b = 1000; System.out.println(a == b);//1 Integer c = 100, d = 100; System.out.println(c == d);//2
你会得到
false
true
基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。
因此,后面一条语句也应该是false 。
这就是它有趣的地方了。如果你看去看 Integer.java 类,你会发现有一个内部私有类,IntegerCache.java,它缓存了从-128到127之间的所有的整数对象。
所以事情就成了,所有的小整数在内部缓存,然后当我们声明类似——
Integer c = 100;
的时候,它实际上在内部做的是
Integer i = Integer.valueOf(100);
现在,如果我们去看valueOf()方法,我们可以看到
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }如果值的范围在-128到127之间,它就从高速缓存返回实例。
所以…
Integer c = 100, d = 100;
指向了同一个对象。
这就是为什么我们写
System.out.println(c == d);
我们可以得到true。
现在你可能会问,为什么这里需要缓存?
合乎逻辑的理由是,在此范围内的"小"整数使用率比大整数要高,因此,使用相同的底层对象是有价值的,可以减少潜在的内存占用。
然而,通过反射API你会误用此功能。
运行下面的代码,享受它的魅力吧
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { Class cache = Integer.class.getDeclaredClasses()[0]; //1 Field myCache = cache.getDeclaredField("cache"); //2 myCache.setAccessible(true);//3 Integer[] newCache = (Integer[]) myCache.get(cache); //4 newCache[132] = newCache[133]; //5 int a = 2; int b = a + a; System.out.printf("%d + %d = %d", a, a, b); // }"Java中为什么1000==1000为false而100==100为true"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
对象
整数
缓存
内容
指向
知识
相同
两个
之间
代码
实际
就是
更多
范围
面的
运行
不同
实用
有趣
学有所成
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全有关新闻
服务器中打印管理如何使用
王忠儒网络安全
软件开发 中专
番茄数据库怎么用
苏州智软科创网络技术
网址数据库链接失败是什么原因
网络安全检测包括
软件开发有限公司有哪些条件
vs2010连接数据库
cad转换gis数据库
开展网络安全法律教育
吃鸡游戏服务器更换
二手服务器建站安全吗
合川区一站式软件开发流程价目表
psn香港服务器
vba 全局变量连接数据库
员工管理系统数据库
数据库不同实体根据什么区分
鸠鸠互联网科技pos机
混沌实验 数据库
2018中国网络安全周
数据库字体敏感
网络技术与应用期末考试答案
拒绝访问请联系服务器管理员
smartbi服务器编码
jdbc获取数据库表结构
北大和国基委合作数据库
access数据库导出指定表格
城市数据库下载