zoukankan      html  css  js  c++  java
  • java的Interger自动包装带来的问题

    1 首先看一下以下代码:

                    Integer b=7;
    		Integer c=7;
    		Integer r=234;
    		Integer d=234;
    		System.out.println(b==c);
    		System.out.println(b.equals(c));
    		System.out.println(r==d);
    		System.out.println(r.equals(d));
    

      

    一眼看下去运行结果就是二个==是false,二个equals是true,根据==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。运行结果如下:

    true
    true
    false
    true

    由于自动包装用Interger类的ValueOf方法实现的,现在去看一下源码ValueOf方法如下:

     

     从上面代码可以看出:当数的范围为-128到127时,二个数==是true,否则是false,Integer里面有一个内部类IntegerCache,是用来做缓存优化性能的。默认缓存了-128到127中间的数字,据说这些使的比较频繁。其实java里面好多的类都有这样的优化。如果在-128-127之间的就直接拿缓存的,不在的就new一个Intege。也就是说自动包装会主动创建一个字节的空间作为缓冲空间来存储-128到127的数。包装类尽量用equals来比较。

  • 相关阅读:
    libmysql.lib 和 mysqlclient.lib的区别
    输入框禁止输入法
    html加后退按钮
    spry
    migration
    Ruby char <=> ASCII
    Javascript innerhtml
    My SQL 索引
    datepicker
    ruby 常用正则表达式
  • 原文地址:https://www.cnblogs.com/shareAndStudy/p/12563151.html
Copyright © 2011-2022 走看看