1.包装类(Wrapper Class)
-
Java并不是纯面向对象的语言,Java是一个面向对象的语言,但是Java的基本数据类型却不是面向对象的!
-
但是在我们的实际生活使用中,经常需要将基本数据转化为对象,便于操作。
-
包装类均位于 Java.lang 包中
-
包装类和基本数据类型的对应关系
基本数据类型 包装类 byte Byte boolean Boolean short Short char Character int Integer float Float long Long double Double -
所有的数字类型基本数据的包装类都继承了一个叫Number的抽象类,所以他们的方法比较相似,这里以Byte为例。
package com.wrapper.demo;
public class demo1 {
public static void main(String[] args) {
byte a = 1;
byte b = 10;
Byte aByte = new Byte(a);
Byte bByte = new Byte(b);
System.out.println(aByte.byteValue()); // 获取byte值
System.out.println(aByte.toString()); // 变成字符串输出
System.out.println(aByte.compareTo(b)); // -9 两个Byte做差 x - y
System.out.println(bByte.compareTo(a)); // 9
System.out.println(aByte.doubleValue()); // 转为double类型
System.out.println(aByte.floatValue()); // 转化为float类型
System.out.println(aByte.equals(1)); // 判断类型和数值是否相等
System.out.println(aByte.hashCode() == 1); // 转化为int类型
System.out.println(aByte.intValue() == 1); // 转化为int类型 , 效率更高
System.out.println(aByte.longValue()); // 转化为long类型
System.out.println(aByte.getClass()); // 获取类
}
}
-
此外,每个包装类还有他们各自实现的接口方法
package com.wrapper.demo; public class Demo2 { public static void main(String[] args) { System.out.println(Integer.max(2, 3)); // 两个整数比大小 System.out.println(Integer.MAX_VALUE); // 最大int System.out.println(Integer.MIN_VALUE); // 最小int System.out.println(Integer.toString(1, 10)); //返回String System.out.println(Integer.toHexString(1000)); // 转换成16进制,并以字符串形式返回 System.out.println(Integer.parseInt("123")); // 将字符串转化为数字 } }
-
自动装箱与自动拆箱 (JDK5之后的特性)
-
自动装箱
- 基本类型自动的分装到他们的包装类中我们称之为自动装箱
Integer i = 123;
- 本质上编译器帮我们自动调用了Integer的构造器
-
自动拆箱
-
包装类自动转化为基本数据类型数据
int i = new Integer(123);
-
本质上编译器自动帮我们调用了intValue方法
int i = new Integer(123).intValue;
-
-
package com.wrapper.demo;
public class Demo3 {
public static void main(String[] args) {
Integer integer = null;
// int i = integer; // NullPointerException integer.intValue()
// 缓存问题
Integer integer1 = 128;
Integer integer2 = 128;
Integer integer3 = 127;
Integer integer4 = 127;
System.out.println(integer3.equals(integer4));// true [-128,127]之间的数任然被当做基本数据类型处理
System.out.println(integer3 == integer4);// true
System.out.println("===========================");
System.out.println(integer1.equals(integer2)); // true 安全的比较
System.out.println(integer1 == integer2); // false
System.out.println("===========================");
String str = "";
System.out.println(str.equals("")); //true
System.out.println(str == ""); //true 字符串比较时,最好两种都加上
}
}