二十八、Java基础之包装类


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



二、包装类对象的创建
character包装类构造方法只有一个,根据基本类型创建包装类对象
其他的包装类构造方法都有两个,根据基本类型创建包装类对象,根据字符串创建包装类对象
public class Test01 {

    public static void main(String[] args){

        //1。根据包装类基本类型创建包装类对象
        Boolean bb= new Boolean(true);
        Character cc = new Character('A');
        Integer ii = new Integer(123);
        Double dd = new Double(3.14);


        //2.根据字符串创建包装类对象,Character没有这个构造方法
        Integer i = new Integer("456");
        Double d = new Double("5.68");
        //注意:根据字符串创建包装类对象时,字符串要符合对应的格式
        //i= new Integer("aaa");//java.lang.NumberFormatException: For input string: "aaa"
        d = new Double("2e3");//2乘以10的3次方,科学计数法
        System.out.println( d );
        //Boolean会把true字符串转化为true,其他的字符串全部转化为false
        Boolean b = new Boolean("true");
        System.out.println( b );
        Boolean bbb = new Boolean("hello");
        System.out.println( bbb );



    }

}

三、包装类的常量
public class Test02 {

    public static void main(String[] args){

        System.out.println(Integer.BYTES);//4
        System.out.println(Integer.SIZE);//32
        System.out.println(Integer.MAX_VALUE);//2147483647
        System.out.println(Integer.MIN_VALUE);//-2147483648
        System.out.println(Integer.TYPE);//int

        System.out.println(Double.POSITIVE_INFINITY);//Infinity
        System.out.println(Double.NEGATIVE_INFINITY);//-Infinity
        System.out.println(Double.NaN);//NaN

        //System.out.println(10/0);        //java.lang.ArithmeticException: / by zero
        System.out.println(10/0.0);      //Infinity
        System.out.println(-10/0.0);     //-Infinity
        System.out.println(0/0.0);       //NaN   not a number

        System.out.println(Character.MAX_VALUE);
        System.out.println(Character.MIN_VALUE);
        System.out.println((int)Character.MIN_VALUE);//0
        System.out.println((int)Character.MAX_VALUE);//65535
    }
}

四、包装类常用的方法

public class Test03 {

    public static void main(String[] args){

        Integer i = new Integer(147);

        //每个包装类都有一个value字段,保存的是这个包装类对应的基本类型数据
        //1。从Number继承的方法,可以把包装类对象转换为基本数据类型,实际上是把value字段强制类型转换
        double d = i.doubleValue();
        byte b = i.byteValue();
        System.out.println( i );//147
        System.out.println( d );//147
        System.out.println( b );//-109


        //2、包装类都实现了Comparable接口,重写了comparaTo()的方法,可以比较两个包装类的大小,根据value字段

        Integer i2 = new Integer("258");
        System.out.println(i.compareTo(i2));        //-1 表示i小于i2
         Boolean b1 = new Boolean(true);
         Boolean b2 = new Boolean(false);
        System.out.println(b1.compareTo(b2));      //1  表示不相等

        //3、重写了equals方法
        System.out.println(i.equals(i2));//false
        System.out.println(b1.equals(b2));//false

        //小数采用近似值保存,有时不准确,如0·1在计算机中是无法准确的表示
        System.out.println(Double.doubleToLongBits(1.1));//4607632778762754458
        System.out.println(Double.doubleToLongBits(0.9));//4606281698874543309

        System.out.println(2-1.1);//0.8999999999999999
        System.out.println(Double.doubleToLongBits(2-1.1));//4606281698874543308
        System.out.println(Double.doubleToLongBits(2-1.1)==Double.doubleToLongBits(0.9));//false

        //4、Integer.parseInt(String)可以把字符串转换为int类型数据
        String text = "456";
        int num = Integer.parseInt(text);
        System.out.println( num );

        //Double.parseDouble(String)可以把字符串转化为double数据
        double pi = Double.parseDouble("3.14");
        //Boolean.parseBoolean(String)可以把字符串转化为boolean数据
        boolean flag = Boolean.parseBoolean("true");

        //在把字符串转化为基本数据类型数据时,字符串要符合目标类型的规则
        //num = Integer.parseInt("3.14");//java.lang.NumberFormatException: For input string: "3.14"

        //5、把十进制数转化为二进制,八进制,十六进制
        System.out.println(Integer.toBinaryString(100));//1100100
        System.out.println(Integer.toOctalString(100));//144
        System.out.println(Integer.toHexString(100));//64

        //6、toString(int)可以把基本类型转化为字符串
        text = Integer.toString(100);//100
        System.out.println(text);
        text = Double.toString(3.14);//3.14
        System.out.println(text);
        text = Boolean.toString(true);//true
        System.out.println(text);

        //valueOf()把基本类型/字符串转换为包装类对象
        i =Integer.valueOf(258);//258
        System.out.println(i);
        i = Integer.valueOf("147");//147
        System.out.println(i);
        Double double1 = Double.valueOf(3.14);//3.14
        System.out.println(double1);
        double1 = Double.valueOf("3.56");//3.56
        System.out.println(double1);
        Boolean boolean1 = Boolean.valueOf(false);//false
        System.out.println(boolean1);
        boolean1 = Boolean.valueOf("ddffd");//false
        System.out.println(boolean1);

    }
}

 五、装箱与拆箱

public class Test04 {
    public static void main(String[] args){

        Integer i1=789;//自动装箱,系统化根据基本数据类型数据789自定创建一个包装类对象,把该对象引用保存到i1中
        Integer i2=789;//自动装箱,系统化根据基本数据类型数据789自定创建一个包装类对象,把该对象引用保存到i2中

        int num = i1;//自动拆箱,系统把i1对象的value字段值赋给num

        //包装类对象判等
        System.out.println(i1.equals(i2));//true
        System.out.println(i1==i2);//false

        Integer i3=88;
        Integer i4=88;
        System.out.println(i3==i4);//true
        /**
         * java认为-128~127之间的整数是使用最频繁的,这个范围内的整数装箱后采用享元模式
         * -128~127之间的整数生成的包装类对象储存在方法区的常量池中
         * 在执行i3=88时,会在常量池中创建一个包装类对象,
         * 在执行i4=88时,直接把常量池中的保重类对象的引用赋值给i4,即现在的i3和i4引用了常量池中同一个包装类对象
         */

        Long long1 = 123L;
        Long long2 = 123L;
        System.out.println(long1==long2);//true




    }
}
原文地址:https://www.cnblogs.com/chushujin/p/11072947.html