Java 中 Integer 10001000 为什么是false, 而 100100 为 true ???
今天在划水中,朋友突然微信给我发来一个截图。问我输出结果是什么?
我:这也太简单了把 两个 false 啊。并且心里暗自得意。Integet 是对象 ==比较的是对象的引用是否相同。为自己的智商得意了一次。
直到朋友回复我微信,给我看了截图之后。
截图如下:
好了,到这里我开始怀疑自己白学Java了。于是去百度寻找答案,现做出整理。
我们知道,用==比较的是两个对象的引用地址。如果两个引用指向不同的对象,则它们是不相等的,即使它们的内容相同。
重点来了:敲黑板。
那么为什么100=100 为true?
答:这就是它有趣的地方了。如果你去看 Integer.java 类,你会发现有一个内部私有类,IntegerCache.java,它缓存了从-128到127之间的所有的整数对象。
所以当我们在声明 Integer c = 100; 的时候内部是:Integer i = Integer.valueOf(100);
如果值的范围在-128到127之间,它就从返回实例。
so
Integer c=100;
Integer d=100;
System.err.println(c==d);#结果就是 true 啦
学而不思则罔,思而不学则殆。