包装类简述(小白理解,小白编写,欢迎大神指点,小白跪谢)

@

一、前言(可忽略)

作者是一位自学JAVA的小白,通过网上视频学习和自己对包装类的理解,现将自己对包装类的认知描述如下:(希望能与各位同行好友共同分享自己所学的java知识,同时,也热切期望各位同行前辈能够帮助作者指出不足,让小白的编程技术能更上一层楼,感谢各位同行大佬。

二、包装类的认知

学过Java的帅锅都知道8种基本数据类型对应8种包装类型(长的也差不多,基本上都是首字母大写,除了int和char,英文有点长),8种包装类也属于引用数据类型,还有String也是(具体可看小白的String简介)。

为什么要提供8种包装类?

简单来说就是因为8种基本类型不够用(小白理解),JAVA是完全面向对象开发,在开发过程中,我们不可避免的使用到对象和多态,面向对象开发,也造成了我们对需要使用对应引用变量的基本数据类型常量的烦恼。

     基本数据类型                     包装类型

     byte                             java.lang.Byte(父类Number)
     short                            java.lang.Short(父类Number)
     int                             java.lang.Integer(父类Number)
     long                           java.lang.Long(父类Number)
     float                             java.lang.Float(父类Number)
     double                       java.lang.Double(父类Number)
     boolean                      java.lang.Boolean(父类Object)
     char                         java.lang.Character(父类Object)

三、包装类的爱与恨

装箱:基本数据类型转换成引用数据类型
    手动装箱:

Integer i=new Integer(100);//照葫芦画瓢,i保存的是在堆内存中的Integer对象的内存地址,Integer对象指向整数常量地址池中的"100",

    自动装箱:

Integer i=100;//照葫芦画瓢

拆箱:引用数据类型转换成基本数据类型

    手动拆箱:

int j=i.intValue();//照葫芦画瓢

    手动拆箱的方法:

       * byte byteValue() 以byte形式返回指定的数值
       * abstract double doubleValue 以double形式返回指定的数值
       * abstract float floatValue()以float形式返回指定的数值
       * abstract int  intValue()以int形式返回指定的数值
       * abstract long longValue()以long形式返回指定的数值
       * short shortValue以short形式返回指定的数值

    自动拆箱:

int j=i;//照葫芦画瓢

重点:

long Y=1000;
Long A=1000L;
System.out.println(Y==A);//引用数据类型与基本数据类型比较,自动拆箱,结果为true
Integer I=1000;
Float F=1000.0;
System.out.println(I==F);//提示出错,数值虽相同,但不同包装类型不可直接比较)
Integer X=100;
Integer C=100
System.out.println(X==C);//true,两对象的内存地址相同

```c
Integer M=100;
System.out.println(M+1);//true,包装类型的变量在进行四则运算时会自动拆箱

注意:为了提高程序的执行效率,Java将所有-128~127之间所有的包装对象都提前创建到了方法区的“整数型常量池中”,所以当使用”==”比较时,由于是使用”=”直接赋内存地址(整数型常量池中的),所以两变量内存地址相同,结果为true

Integer H=100; 
java.lang.Integer D=new java.lang.Integer(100);
System.out.println(H==D);//false D和H存放的内存地址不一样
        java.lang.Integer x=1000;
        java.lang.Integer b=0;
        java.lang.Integer c=1000;
        java.lang.Long N=1000L;
        System.out.println(x.equals(c+b));//true, 先进行b和C的自动拆箱,求出b+c并自动装箱,再调用euqals方法进行对象引用的值比较。
        System.out.println(N.equals(c+b));//false
     
 java.lang.Integer K=1000;
 java.lang.Integer Q=0;
 java.lang.Long A=1000L;
 System.out.println(A==(K+Q));首先A进行自动拆箱,K+Q由于进行四则运算自动拆箱,比较对象的值,由于JAVA在对类型转换时会自动向上转,int->long

注意:equals在比较不同包装类型时,由于类型不同会返回false

通过访问包装类的常量,来获取最大值和最小值(获取类型取值范围)

//比如int的取值范围
 java.lang.Integer x=1000;
 System.out.println(x.MIN_VALUE);//-2147483648
 System.out.println(x.MAX_VALUE);//2147483647

四、包装类的异常

        Long l=new Long("Chinese");
        long I=l;
        System.out.println(I);//异常报错:NumberFarmatException
        //编译没错,但运行的时候会出现异常,只能是数字包装。
        Long X=new Long("123");
        long Y=X;
        System.out.println(Y);//123

五、包装类的方法

static int parseInt(String s)

作用:静态方法,传参String,返回int,类名调用

           int RetValue=java.lang.Integer.parseInt("123");//String->int,照葫芦画瓢
           System.out.println(RetValue);//123

static String toBinaryString(int)

作用:静态,将int以十进制转化成二进制

        System.out.println(java.lang.Integer.toBinaryString(10));//1010      

static String toHexString(int x)

作用:静态,将int以十进制转化成十六进制

        System.out.println(java.lang.Integer.toHexString(17));//11

static String toOctalString(int)

作用:静态,将int以十进制转换成八进制

        System.out.println(java.lang.Integer.toOctalString(10));//12

static Integer valueOf(int i)

作用:静态,类型互转,将i以int转换成Integer

        System.out.println(java.lang.Integer.valueOf(100));//100

static Integer valueOf(String x)

作用:静态,类型互转,将x以String转换成Integer

        System.out.println(java.lang.Integer.valueOf("1000"));//1000,String只能以数字形式输入,否则报NumberFormatException错误

Tags: