• 自动装箱和自动拆箱


    1.什么是自动装箱和自动拆箱

    java中为没一种基本类型都提供相应的包装类型。

    byte,short,char,int,long,float,double和boolean

    Byte,Short,Character,Integer,Long,Float,Double,Boolean。

    自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。

    2.原理

    例如:Integer i = 100;

    Java虚拟机会自动调用Integer的valueOf方法,编译为:Integer i = Integer.valueOf(100);

    拆箱:

    Integer i = 10; //装箱 
    int t = i; 

    Java虚拟机会自动调用Integer的intValue方法, 编译为:int t=i.Integer.intValue();

    3.注意的问题:

    1.自动装箱和拆箱,要注意空指针的问题。 拆箱的如果为Null,则会报空指针异常。

    2.缓存问题。

    第一段代码:

    public class TestMain
    {
        public static void main(String[] args)
        {
            Integer i1 = 100;
            Integer i2 = 100;
            Integer i3 = 200;
            Integer i4 = 200;
            
            System.out.println(i1 == i2);
            System.out.println(i3 == i4);
        }
    }
    

      运行结果为:

    true
    false
    

      第二段代码:

    public class TestMain
    {
        public static void main(String[] args)
        {
            Double d1 = 100.0;
            Double d2 = 100.0;
            Double d3 = 200.0;
            Double d4 = 200.0;
            
            System.out.println(d1 == d2);
            System.out.println(d3 == d4);
        }
    }
    

     运行结果:

    false
    false
    

      

     说明:

    equals() 比较的是两个对象的值(内容)是否相同。

    "==" 比较的是两个对象的引用(内存地址)是否相同,也用来比较两个基本数据类型的变量值是否相等。

    产生上面的结果的原因是:Byte、Short、Integer、Long、Char这几个装箱类的valueOf()方法是以128位分界线做了缓存的,假如是128以下且-128以上的值是会取缓存里面的引用的,以Integer为例,其valueOf(int i)的源代码为:

    public static Integer valueOf(int i) {
        final int offset = 128;
        if (i >= -128 && i <= 127) { // must cache 
            return IntegerCache.cache[i + offset];
        }
            return new Integer(i);
        }
    

      

    而Float、Double则不会,原因也很简单,因为byte、Short、integer、long、char在某个范围内的整数个数是有限的,但是float、double这两个浮点数却不是。关于这个小知识点,个人提出两点意见:

    1、不重要,除了面试考察求职者对于知识的掌握程度,没多大用

    2、要有缓存这个概念,缓存对于提高程序运行效率、节省内存空间是有很大帮助的

    转载地址:http://www.cnblogs.com/xrq730/p/4869065.html

  • 相关阅读:
    Super Jumping! Jumping! Jumping!(求最大上升子序列和)
    HZNU1837——一道简单的方程
    C
    B
    A
    bfs-Find a way
    bfs——Red and Black
    dfs——n皇后问题
    dfs——n皇后问题
    python画图中colorbar设置刻度和标签字体大小
  • 原文地址:https://www.cnblogs.com/haitaofeiyang/p/7711558.html
Copyright © 2020-2023  润新知