首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

为什么Java“1000==1000”false,而”100==100“true

日常编程,我们经常遇到一些看似简单却隐藏着复杂逻辑问题。 比如,你是否想过为什么 Java 中表达式1000==1000会返回 false,而 100==100 却返回 true 呢?...这个 IntegerCache 是 Java Integer 类一个内部静态类 ,它缓存了 -128 到 127 之间整数。...3、解答问题 看懂了源码,回到上面的问题,为什么表达式1000==1000会返回 false,而 100==100 却返回 true 呢?...当我们使用 Integer 对象比较两个数时,实际上是比较对象内存地址。由于“100”缓存范围内,两个“100”实际上引用是同一个对象,所以返回 true。...d = 1000; System.out.println(c.equals(d)); // 输出:true 这点在阿里开发手册也有详细说明:

10910

为什么 Java “1000==1000”false,而”100==100“true

英文原文:http://dwz.date/crTP 这是一个挺有意思讨论话题,大家可以,动手实操一下。 为什么 Java “1000==1000”false,而”100==100“true?...; System.out.println(a == b);//1 Integer c = 100, d = 100; System.out.println(c == d);//2 你会得到 false...true 基本知识:我们知道,如果两个引用指向同一个对象,用 == 表示它们是相等。...如果两个引用指向不同对象,用 == 表示它们是不相等,即使它们内容相同。 因此,后面一条语句也应该是 false 。 这就是它有趣地方了。...这就是为什么我们写 System.out.println(c == d); 我们可以得到 true。 现在你可能会问,为什么这里需要缓存?

54640

Java“100=100”true,而1000=1000false

为什么会产生这样结果呢? 1 Integer对象 上面例子a和b,是两个Integer对象。 而非Java8种基本类型。...Java,除了上面的这8种类型,其他类型都是对象,保存是引用,而非数据本身。...JVM内存分布情况是下面这样创建了两个局部变量a和b,同时堆上new了两块内存区域,他们存放值都是1000。 变量a引用指向第一个1000地址。...而变量b引用指向第二个1000地址。 很显然变量a和b引用不相等。 既然两个Integer对象用==号,比较是引用是否相等,但下面的这个例子为什么又会返回true呢?...文章示例1000,超出了-128~127范围,所以对象a和b引用指向了两个不同地址。 而示例100,-128~127范围内,对象a和b引用指向了同一个地址。

19210

为什么1000 == 1000返回False,而100 == 100会返回True?

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之间所有整数对象提供缓存。...这就是为什么这段代码结果true了: System.out.println(c == d); 现在你可能会问,为什么会为-128到127之间所有整数设置缓存?...这是因为在这个范围内小数值整数日常生活使用频率要比其它大得多,多次使用相同底层对象这一特性可以通过该设置进行有效内存优化。你可以使用reflection API任意使用这个功能。

1.7K50

奇怪Java题:为什么128 == 128返回false,而127 == 127会返回true?

奇怪Java题:为什么128 == 128返回false,而127 == 127会返回true? 回答这个问题之前,我们先来看看int和Integer对比,一步步揭开问题答案。...,其内存地址不同 (2) Integer变量和int变量比较时,只要两个变量值是相等,则结果true。...,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量比较 (3) 非new生成Integer变量和new Integer()生成变量比较时,结果false。...加大对简单数字重利用,Java定义自动装箱时对于值从–128到127之间值,它们被装箱Integer对象后,会存在内存中被重用,始终只存在一个对象。 2....上图也可以从代码断点看出 i 和 j 地址相同 以上堆,栈,常量池等java概念,可以到 java堆、栈、堆栈,常量池区别,史上最全总结 学习更多知识。

2.2K31
领券