怎么做投票网站,长沙水业网站是哪家公司做的,做视频可以赚钱的网站,建设网站的网站江苏这是一个挺有意思的讨论话题#xff0c;让我们用代码说话吧!运行下面的代码:Integer a 128, b 128;System.out.println(a b);Integer c 100, d 100;System.out.println(c d);你会得到:falsetrue基本知识#xff1a;我们知道#xff0c;如果两个引用指向同一个对象让我们用代码说话吧!运行下面的代码:Integer a 128, b 128;System.out.println(a b);Integer c 100, d 100;System.out.println(c d);你会得到:falsetrue基本知识我们知道如果两个引用指向同一个对象用表示它们是相等的。如果两个引用指向不同的对象用表示它们是不相等的即使它们的内容相同。因此后面一条语句也应该是false 。如果你看去看 Integer.java 类你会发现有一个内部私有类IntegerCache.java它缓存了从-128到127之间的所有的整数对象。所以事情就成了所有的小整数在内部缓存然后当我们声明类似如下Integer c 100;的时候它实际上在内部做的是Integer i Integer.valueOf(100);当我们去看valueOf()方法我们可以看到public static Integer valueOf(int i) {if (i IntegerCache.low i IntegerCache.high)return IntegerCache.cache[i (-IntegerCache.low)];return new Integer(i);}如果值的范围在-128到127之间它就从高速缓存返回实例。所以Integer c 100, d 100;指向了同一个对象。这就是为什么写System.out.println(c d);可以得到true。为什么这里需要缓存合乎逻辑的理由是在此范围内的“小”整数使用率比大整数要高因此使用相同的底层对象是有价值的可以减少潜在的内存占用。然而通过反射API你会误用此功能。运行下面的代码感受下Java的魅力吧public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {Class cache Integer.class.getDeclaredClasses()[0];Field myCache cache.getDeclaredField(cache);myCache.setAccessible(true);Integer[] newCache (Integer[]) myCache.get(cache);newCache[132] newCache[133];int a 2;int b a a;System.out.printf(%d %d %d, a, a, b);}运行结果--------------------------------------版权声明本文为【PythonJsGo】博主的原创文章转载请附上原文出处链接及本声明。博主主页https://my.oschina.net/u/3375733本篇文章同步在个人公众号