Java中为什么1000==1000为false而100==100为true
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容介绍了"Java中为什么1000==1000为false而100==100为true"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
互联网加科技
互联网科技深圳
盈实互联网科技
没上市的科技互联网公司
深圳科技互联网
奇酷互联网科技
中国互联网科技发展
互联网科技媒体
奔汉互联网科技
中国互联网金融科技基金
互联网科技类展会
海南购全球互联网科技
山东吉时兔互联网科技有限公司
互联网大会黑科技排名
洛阳共同富裕互联网科技有限公司
滨湖区互联网智能科技产品有哪些
广州百诚互联网科技有限公司官网
半导体是互联网高科技吗
图游互联网科技
科技和互联网行业的特点
互联网科技公司电话
杭州互联网科技公司
致聘互联网科技
科技大学互联网专业好不好
博兴的互联网电子科技公司
互联网大会黑科技排名
互联网为啥属于高科技
浙江互联网科技研学营
雨阳互联网卡科技有限公司
科技互联网行业投资研究