基本数据类型的包装类
一:使用规范和特性
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 }