你的位置:首页 > 软件开发 > Java > 为什么 Java中1000==1000为false而100==100为true?AND 2+2=5?

为什么 Java中1000==1000为false而100==100为true?AND 2+2=5?

发布时间:2015-11-24 11:00:04
前提:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。 运行下面代码:  结果:   按照我们之前所知道的,a==b 也应该return false; Wh ...

 前提:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。 

 运行下面代码:

  为什么 Java中1000==1000为false而100==100为true?AND 2+2=5?

结果:

  为什么 Java中1000==1000为false而100==100为true?AND 2+2=5?

   按照我们之前所知道的,a==b 也应该return false;   Why?

  这就是代码有趣的地方。如果你去看Integer.java类,你会发现有一个内部私有类,IntegerCache.java,它缓存了从-128到127之间的所有的整数对象。

   所以事情就成了,所有的小整数在内部缓存,然后当我们声明类似——

  为什么 Java中1000==1000为false而100==100为true?AND 2+2=5?时,它实际在内部做的是: 为什么 Java中1000==1000为false而100==100为true?AND 2+2=5?

  进入valueof()方法,可以看到

  为什么 Java中1000==1000为false而100==100为true?AND 2+2=5?

  为什么 Java中1000==1000为false而100==100为true?AND 2+2=5?

  如果值的范围在-128到127之间,它就从高速缓存返回实例。

  所以为什么 Java中1000==1000为false而100==100为true?AND 2+2=5?指向了同一个对象

  这样就得到a==b为true

  现在你可能会问,为什么这里需要缓存?

  合乎逻辑的理由是,在此范围内的“小”整数使用率比大整数要高,因此,使用相同的底层对象是有价值的,可以减少潜在的内存占用。

  然而,通过反射API你会误用此功能。

  运行下面的代码,享受它的魅力吧

  为什么 Java中1000==1000为false而100==100为true?AND 2+2=5?

  为什么 Java中1000==1000为false而100==100为true?AND 2+2=5?

  译文链接:http://www.codeceo.com/article/why-java-1000-100.html

原标题:为什么 Java中1000==1000为false而100==100为true?AND 2+2=5?

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。