首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

因此,结果就会出现false。 这是非常有趣的地方。如果你查看Integer.java类,你会找到IntegerCache.java这个内部私有类,它为-128到127之间的所有整数对象提供缓存。...这个东西为那些数值比较小的整数提供内部缓存,当进行如此声明时: Integer c = 100; 它的内部就是这样的: Integer i = Integer.valueOf(100); 如果我们观察valueOf()类函数...-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。...Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较 (3) 非new生成的Integer变量和new Integer()生成的变量比较时,结果...加大对简单数字的重利用,Java定义自动装箱时对于值从–128到127之间的值,它们被装箱Integer对象后,会存在内存中被重用,始终只存在一个对象。 2....上图也可以从代码断点看出 i 和 j 的地址相同 以上堆,栈,常量池等java的概念,可以到 java堆、栈、堆栈,常量池的区别,史上最全总结 学习更多知识。

2.2K31

C++函数返回结果自定义类型

我看源码的时候,经常可以看到一个函数的前面,就是本身应该在放void,int这种的地方,却出现了指针,结构体,类等的东西。...C++函数返回值是自定义类型的情况主要分为两种,一种是非引用类型的自定义类;另一种是引用类型的自定义类。...使用临时对象(temporary object)来保存函数返回值。函数返回值用于初始化调用点的一个临时对象,该临时对象就是函数调用的结果。其返回右值。不能作为左值。...当函数返回值是引用类型时,其返回值即为return的变量,所以不需要临时对象保存其返回值。所以,对于返回引用类型的函数,其返回左值。...函数返回值用于初始化调用点的一个临时对象,该临时对象就是函数调用的结果。所以,当函数返回值是自定义的值类型时,即使函数返回值是局部变量,其返回值也是有效值。

1.3K30

为什么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。...相反,“1000”不在缓存范围内,即使数值相同,两个“1000”也是不同的对象,因此内存地址不同,返回 false

11410
领券