阿抗

导航

基本数据类型的包装类

基本数据类型的包装类

一:使用规范和特性
  01.集合中的泛型类型<T> 不允许出现基本数据类型
  02.定义了一个基本数据类型的变量,变量名不能点出来东西, 包装类可以
  03.基本数据类型不能转换成对象, 包装类可以
  04.所有的包装类都是由final修饰的, 不允许被继承
  05.在基本数据类型需要转换成对象的时候 使用包装类
  06.jdk1.5以后,允许基本数据类型和包装类进行混合运算,底层有装箱和拆箱操作

  基本数据类型   包装类
    byte      Byte
    short     Short
    int      Integer
    long      Long
    float      Float
    double       Double
  上面的六种都是数值类型!都是 extends Number implements Comparable<T>
  Number抽象类:
    public abstract class Number implements java.io.Serializable 支持 序列化

  基本数据类型   包装类
     char      Character
   boolean     Boolean
  上面两种都是 implements java.io.Serializable, Comparable<T>

二:自动装箱,拆箱的机制
   装箱和拆箱 ===》包装类和对应基本数据类型的转换
   装箱: 把基本数据类型转换成对应的包装类 Integer num=1;
   拆箱: 把包装类转换成对应的基本数据类型 int num2=num;

 1 /**
 2      * 01.所有的包装类 都有将对应的基本数据类型作为参数 来构造自己的实例
 3      * 02.除了Character以外的7种包装类 都有将  String作为参数 来构建自己的实例
 4      * 6种数值类型的包装类都继承了Number
 5      * 所以在用String作为参数来创建自己实例的时候,
 6      * 如果参数不能转换成数值 则抛出 NumberFormatException
 7      */
 8     public void test01() {
 9         //基本数据类型创建对象
10         Byte b = new Byte((byte) 1);//类型强制转换
11         Short s = new Short((short) 1);//类型强制转换
12         Integer i = new Integer(1);
13         Long l = new Long(1);
14 
15         //Float有三种实例化的方法  参数分别是double   float  和 String
16         Float f = new Float(1.0);
17         Double d = new Double(5.2);
18 
19         Character c = new Character('1'); 
20         Character c2 = new Character((char) 50);// char的数值取值范围  0-65535
21         Boolean bo = new Boolean(true);
22         
23     }
 1 /**
 2      * 03.除了Character以外的7种包装类 都有parseXxx(String s),
 3      *      用于将字符串封装成相应的包装类,该方法是静态方法。 
 4      *      001. 四种整型对应的包装类 都是 parseXxx(String s,int radix)//radix 进制转换
 5      *      002. 其他的四种都没有 parseXxx(String s,int radix)
 6      *      003. Character压根没有parseXxx()
 7      */
 8  9     public void test03() {
10         Byte b = new Byte("1");
11         Short s = new Short("1");
12         Integer i = new Integer("1");
13         Long l = new Long("1");
15         Float f = new Float("1");
16         Double d = new Double("1");
17         Character c = new Character('1'); // 没有parseXxx
18         Boolean bo = new Boolean("TRUE");
19     }

  装箱和拆箱的操作:

 1 /**
 2      * 04.      valueOf()===》装箱
 3      *      把基本数据类型转换成对应的包装类  
 4      *      除了Character没有参数是String类型的方法
 5      *       xxxValue()方法===》拆箱 
 6      *      把xxx类型转换成对应的基本数据类型  
 7      */
 8     public void test05() {
 9         int num = 5;
10         Integer i = Integer.valueOf(num); // 装箱
11         num = i.intValue(); // 拆箱
12     }        

  进制转换:

/**
     * 05.进制转换  需要学习 位运算
     */
    @Test
    public void test04() {
        System.out.println("2进制的10对应的数据===》" + Integer.toBinaryString(10));
        System.out.println("8进制的10对应的数据===》" + Integer.toOctalString(10));
        System.out.println("16进制的10对应的数据===》" + Integer.toHexString(10));
    }

  面试题:

/**
     * 经典的面试题
     *  因为Integer.valueOf() 会缓存  -128 到  127 之间的数据!
     *  如果我们的数字在这个区间,不会去创建新的对象,而是从缓存池中获取!
     *  否则就new  Integer();
     */
    public void test06() {
        int num1 = 127;
        int num2 = 127;
        System.out.println(num1 == num2); // true
        Integer a1 = new Integer(127);
        Integer b1 = new Integer(127);
        System.out.println(a1 == b1);// false
        Integer a = 127;
        Integer b = 127;
        System.out.println(a == b);// true
        Integer c = 128;
        Integer d = 128;
        System.out.println(c == d); // false
    }
    public void test07() {
        System.out.println("1" + 1 + 1);// 111
        System.out.println(1 + 1 + "1" + 1);// 211
    }

 

posted on 2017-12-25 14:07  阿抗  阅读(306)  评论(0编辑  收藏  举报