包装类

Posted huochemeiyouhuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了包装类相关的知识,希望对你有一定的参考价值。



? 在java中, 系统为每一个基本类型都提供 了 一个对应的包装类型

基本类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean


包装类在java.lang包中


技术图片


为什么提供包装类?

为了编程方便


包装类对象的创建(构造方法)

1.Java会把这些基本类型数据自动转换为包装类对象

public static void m1(Object obj) {

}

public static void main(String[] args) {
        m1(true);
        m1(456);
        m1(3.14);
        m1("abc");
        /*
         * 不能直接把基本类型数据赋值给引用类型变量
         * 当前程序没有语法错误,是因为Java把这些基本类型数据自动转换为了包装类对象, 再把包装 类对象传递给obj形参
         */
}


2.包装类的用法

        //1)根据基本类型创建包装类对象
        Boolean  boolean1 = new Boolean(true);
        short s = 123;
        Short short1 = new Short(s);
        Integer integer1 = new Integer(78945);
        Double  double1 = new Double(3.14);
        Character character1 = new Character('a');
        
        //2)根据字符串创建包装类对象
        boolean1 = new Boolean("true");
        integer1 = new Integer("456");
        double1 = new Double("45.789");
        //注意1: 字符串的格式要符合数字的格式
//      integer1 = new Integer("aa");   //java.lang.NumberFormatException
        double1 = new Double("23e3");   //科学计数法
        System.out.println(double1);        //23000.0
        //注意2: 布尔类型的包装类把"true"字符串转换为true, 其他的字符串都转换为false
        boolean1 = new Boolean("adfasfaslf");
        System.out.println( boolean1 );
        //注意3: Character包装类只有一个构造方法
//      character1 = new Character("A");
        
        //3)输出常用字段
        System.out.println( Integer.BYTES);             //字节数, 4
        System.out.println( Integer.SIZE);              //位数:  32
        System.out.println( Integer.TYPE);              //基本类型 : int
        System.out.println( Integer.MIN_VALUE);
        System.out.println( Integer.MAX_VALUE);



包装类的基本操作

        Integer i1 = new Integer(123);
        Integer i2 = new Integer("456");
        
        //1)从Number继承的 方法, 可以把包装类对象转换为基本类型数据
        byte bb = i1.byteValue();
        double dd = i2.doubleValue();
        
        //2)包装类实现了Comparable接口,重写了compareTo()方法, 根据包装类的value字段比较大小
        //每个包装类都有一个value字段,保存对应基本类型的数据
        System.out.println( i1.compareTo(i2) );         //-1
        Character c1 = new Character('A');
        Character c2 = new Character('a');
        System.out.println( c1.compareTo(c2));          //-32
        Boolean b1 = new Boolean(true);
        Boolean b2 = new Boolean(false);
        System.out.println( b1.compareTo(b2));          //1
        
        //3)equals(), 根据value字段进行判断是否相等
        System.out.println( i1.equals(i2));
        
        //4) static int parseInt(String s)   可以把字符串转换为基本类型数据, 经常用
        int num = Integer.parseInt("789");      
        dd = Double.parseDouble("45.78");

        //注意, 字符串要符合数字格式
        num = Integer.parseInt("adf");  //java.lang.NumberFormatException
        
        //5)valueOf() 把基本类型/字符串转换为包装类对象
        i1 = Integer.valueOf(369);
        i2 = Integer.valueOf("258");



装箱与拆箱

  • 装箱:

    把基本类型转换为包装类对象

  • 拆箱:

    把包装类对象转换为基本类型


        Integer i1 = 147;       //自动装箱
        int num = i1;           //自动拆箱
        
        Integer i2 = 666;       //根据基本类型数据666创建了一个包装类对象, 把这个包装类对象的引用赋值给i2
        Integer i3 = 666;       //重新创建了一个包装类对象
        System.out.println( i2.equals(i3));     //true
        System.out.println( i2 == i3 );         //false
        
        Integer i4 = 77;
        Integer i5 = 77;
        System.out.println( i4 == i5 );         //true
        /*
         * Java认为-128~127之间的整数使用最频繁, 所以这个范围内整数创建的包装类对象采用享元模式 , 即把包装类对象存储到共享池中
         * 在执行 i4 = 77时, 系统根据77创建一个Integer对象, 把该对象存储到共享池中
         * 当执行i5 = 77时, 系统直接把共享池中的Integer对象的引用赋值给i5
         */
        
        Long gg1 = 15L;
        Long gg2 = 15L;
        System.out.println( gg1 == gg2 );       //true

以上是关于包装类的主要内容,如果未能解决你的问题,请参考以下文章

如何包装所有片段(不在里面)or) with?

Java 封装

Java 封装

Java 封装

Java 封装

Java 封装