zoukankan      html  css  js  c++  java
  • 关于包装类及==equals的一些误区

            Integer i1=10;
            Integer i2=10;
            
            Integer i3=new Integer(10);
            Integer i4=new Integer(10);
            System.out.println(i1==i2);
            System.out.println(i1==i3);
            System.out.println(i3==i4);
            System.out.println(i1.equals(i2));
            System.out.println(i1.equals(i3));
            System.out.println(i3.equals(i4));
        /**
         * 输出结果:
                true
                false
                false
                true
                true
                true
        分析:首先区别==跟equals,==如果是比较的基本数据类型,则比较的是值,如果比较的引用类型则比较的是内存地址
        equals所有类默认继承自object,object中的equals跟==是一样的,这里的equals是Integer中被重写后的,比较的是值
        第一个i1==i2为ture:这里jvm自动将10装箱转换为Integer类型,并且这个10是一个Integer对象而不是数值,i1跟i2的10并非来自常量区,而是Integer自己的静态区中
        Integer类加载的时候自己有一个静态空间,空间里的静态块立即加载了一个Integer类型的数组,里面存储的256个Integer对象,取值范围是byte的取值范围即-128->127
        第二个为false:因为i1指向的是自己的静态空间的对象10的地址,i3则是通过new关键字在堆内存中开辟的内存空间指向的地址。
        第三个为false:同上,i3,i4都是通过new在堆中开辟的两个不同的空间,地址当然也不同
        四五六都为true:这里的equals比较的是值,i1,i2,i3,i4存储的都是对象10
        误区:如果i1=128,i2=128那么,第一个为false,原因是如果我们的取值在-128->127这个范围,则使用的是Integer自带的数组中Integer对象
        如果超过这个范围则会自动帮我们new一个,即i1=128等价i1=new Integer(128);
         */
        
  • 相关阅读:
    NTP服务安装
    Teambition 的使用
    搭建svn服务器和测试
    通过NTP协议进行时间同步
    转利用OpenSSL库对Socket传输进行安全加密(RSA+AES)
    转源码编译安装MySQL5.6.12详细过程
    CentOS 6.4安装ffmpeg2.4.2 支持h.265
    转:CentOS 6.4 64-bit编译安装ffmpeg
    Work 2013 博客园挂博客
    FLASH和EEPROM的最大区别
  • 原文地址:https://www.cnblogs.com/hebiao/p/12696096.html
Copyright © 2011-2022 走看看