由于“100”在缓存范围内,两个“100”实际上引用的是同一个对象,所以返回 true。 相反,“1000”不在缓存范围内,即使数值相同,两个“1000”也是不同的对象,因此内存地址不同,返回 false。 4、正确比较 其实对于 Integer 这种包装类比较大小,我们应该使用equals()方法来比较两个Integer对象的数值,而不是直接使用==...
1000 == 1000返回false是因为Integer对象不会被池化,两个Integer对象是不同的实例,所以引用比较返回false。 100 == 100返回true是因为100属于 -128 到 127 之间的范围,会被自动池化,所以两个Integer对象指向同一个缓存实例,引用比较返回true。 验证: 编写一个简单的 Java 程序来测试这个现象: publicclassTest{publ...
因此,后面一条语句也应该也是 false 。这就是它有趣的地方了。如果你看去看 Integer.java 类,你会发现有一个内部私有类,IntegerCache.java,它缓存了从 - 128 到 127 之间的所有的整数对象。所以事情就成了,所有的小整数在内部缓存,然后当我们声明类似——Integer c = 100; 的时候,它实际上在内部做的是:I...
输出false的原因: 当我们执行Integer a = 1000;时,Java会创建一个新的Integer对象。 同样,对于Integer b = 1000;,又会创建一个新的Integer对象。 因为a和b指向的是不同的对象,所以a == b比较的是它们的引用(地址),因此返回false。 输出true的原因: 对于Integer c = 100;和Integer d = 100;,因为数值在-...
falsetrue 基本知识:我们知道,如果两个引用指向同一个对象,用 == 表示它们是相等的。如果两个引用指向不同的对象,用 == 表示它们是不相等的,即使它们的内容相同。因此,后面一条语句也应该是 false 。这就是它有趣的地方了。如果你看去看 Integer.java 类,你会发现有一个内部私有类,IntegerCache.java,...
为什么"100==100"为true,而"1000==1000"为false? int是Java的基本数据类型,基本数据类型不存在引用,直接保存数值。双等号会比较int的值。所以用int声明两个1000是相等的。如果一边是int,一边是Integer,Integer会自动拆箱成int来比较,所以值为true。 Integer是一个对象,双等号会比较对象的地址是否相同。
现在,我们来看看为什么1000 == 1000 为false而100 == 100 为true。这是因为Java中的整数有一个范围。整数的范围是-2147483648到2147483647。当我们创建一个整数时,Java会为它分配一个内存空间。如果两个整数具有相同的值,但分配给它们的内存空间不同,则双等号运算符将返回false。这就是为什么1000 == 1000 为fals...
Integer integer1 = 100;其实是Integer i = new Integer(100);的简化写法,就是因为Java中提供了自动装箱的功能。 自动装箱的缓存机制 Java SE的自动拆装箱还提供了一个和缓存有关的功能。 为了节省内存和提升性能,Java给多个包装类型提供了缓存机制,可以在自动装箱过程中,把一部分对象放到缓存中,实现了对象的复用...
Java中obj1==obj2 判断是obj1,obj2这两个引用变量是否相等,即它们所指向的对象是否为同一个对象。言外之意就是要求两个变量所指内存地址相等的时候,才能返回true,每个对象都有自己的一块内存, 因此必须指向同一个对象才返回ture。 2、后面两个int类型均返回true,是因为int是基本的数据类型,"=="比较的其实就...
#为什么 Java 中“1000==1000”为false,而”100==100“为true?# 这是一个挺有意思的讨论话题。如果你运行下面的代码 Integer a = 1000, b = 1000; System.out.println(a == b);//1 Integer c = 100, d...