java包装类
1.java为基本数据类型准备的八种包装类,属于引用的数据类型
2.思考:为何需要八种包装类,目的??
一、八种基本数据类型对应的包装类
二、类的层次结构
除了Boolean和Character直接继承Object其余的继承的是Number
三、Number中的公共方法
3.1 Number是一个抽象类,无法实例化
3.2 包装类转换为引用数据类型
// 创建 Integer类型的对象,通过包装123使其为包装类型
Integer integer = new Integer(123);
// 调用父类 Number的方法将保包装类转换为基本数据类型
int i = integer.intValue();
System.out.println(i); // 123
将基本数据类型 – > 引用数据类型 叫做装箱
引用数据类型 —> 基本数据类型 叫拆箱
byteVaue(),shortVaue(),intValue(),longValue(),floatValue()和 doubleValue()方法都是用来拆箱的
由于存在自动拆箱和自动装箱,所以Number里面的方法无用了
四、Integer的构造方法
4.1 Integer(int value)
Integer integer = new Integer(12);
System.out.println(integer);
4.2 Integer(String s)
Integer integer = new Integer("12");
System.out.println(integer);
Integer integer = new Integer("i love java");
// 不可以将文字包装为 Integer,编译时没问题,运行时异常
五、Integer的方法
5.1通过访问包装类的常量,来获取最大值和最小值
//通过访问包装类的常量,来获取最大值和最小值
System.out.println("int的最大值"+Integer.MAX_VALUE); // int的最大值2147483647
System.out.println("int的最小值"+Integer.MIN_VALUE);//int的最小值-2147483648
5.2(重点) static int parseInt(String s)
将字符串类型----> int类型
String s = "12";
int ss = Integer.parseInt(s);
System.out.println(ss);
网页上面输入的100数字其实是,“100”字符串
后台数据库中要求存储100数字,需要java程序将数据转化int
5.3了解的方法
static String toBinaryString(int i) 静态方法,将十进制转化为二进制字符串
String s = Integer.toBinaryString(3);
System.out.println(s);
static String toHexString(int i) 静态方法,将十进制转化为十六进制字符串
String s = Integer.toHexString(16);
System.out.println(s); // 10
static String toOctalString(int i)静态方法,将十进制转化为八进制字符串
String s = Integer.toOctalString(8);
System.out.println(s);
六、jdk1.5后的自动拆箱和自动装箱
自动装箱:基本数据类型自动转换成包装类。
自动拆箱:包装类自动转换成基本数据类型。
由于存在自动拆箱和自动装箱,所以Number里面的方法无用了
// 自动装箱
Integer x = 100; // 虽然自动转换,但是底层还是new Integer(100),x里面保存的地址值.
System.out.println(x + 1);
// + 两边需要是基本数据类型,所以在相加的时候会自动转换.
// 只有 + - * / 运算的时候才会触发自动装箱和自动拆箱。
// == 比较的是地址值,不会触发自动装箱和自动拆箱.
// 自动拆箱
int y = x;
// x是一个变量,保存的是内存地址
七、奇葩案例,面试题
7.1解释程序的原因
Integer a = 128;
Integer b = 128;
System.out.println(a == b); // false
Integer x = 127;
Integer y = 127;
System.out.println(x == y); // true,内存地址相同.
java为了提高程序的执行效率将 -128到127,所有包装对象提取创建好,放入到整数性常量池里面,在使用 -128—127之间的数据的时候就不在new对象了
== 永远判断的对象的内存地址