包装类
- 1.包装类的定义和使用
- 2.基本类型和包装类的互相转换
- 3.装箱和拆箱
- 4.包装类的比较
- 5.拆箱空指针异常
- 6.包装类的常见方法
对于
byte
,
short
,
int
,
long
,
float
,
double
,
boolean
等基本类型,编程过程中我们常常需要使用到对象,在Java上提供了这些类型的包装类。
Byte
,
Short
,
Long
,
Float
,
Double
,
Boolean
等。
1.包装类的定义和使用
package boxing;
/**
* [简要描述]:包装类测试
* [详细描述]:
*
* @author Smalight Lv
* @version 1.0, 2021/4/6 09:48
* @since JDK 1.8
*/
public class BoxingTest {
public static void main(String[] args) {
Byte boxByte = 1;
Short boxShort = 2;
Integer boxInt = 5;
Float boxFloat = 50.35f;
Double boxDouble = 100.22;
Boolean boxBool = true;
System.out.println("boxByte = " + boxByte);
System.out.println("boxShort = " + boxShort);
System.out.println("boxInt = " + boxInt);
System.out.println("boxFloat = " + boxFloat);
System.out.println("boxDouble = " + boxDouble);
System.out.println("boxBool = " + boxBool);
}
}
运行结果:
boxByte = 1
boxShort = 2
boxInt = 5
boxFloat = 50.35
boxDouble = 100.22
boxBool = true
2.基本类型和包装类的互相转换
package boxing;
/**
* [简要描述]:基本类型和包装类的互相转换
* [详细描述]:
*
* @author Smalight Lv
* @version 1.0, 2021/4/6 10:12
* @since JDK 1.8
*/
public class TansBaseAndBox {
public static void main(String[] args) {
int i = 5;
Integer boxInt = Integer.valueOf(i);//基本类型转换成我装类
int j = boxInt.intValue();//包装类的值赋值给基础类型
System.out.println("i = " + i);
System.out.println("boxInt = " + boxInt);
System.out.println("j = " + j);
}
}
运行结果:
i = 5
boxInt = 5
j = 5
3.装箱和拆箱
将基本类型赋值包装类时,编译器可以把基本类型装箱为包装类,这个过程称为自动装箱(Auto Boxing)。将包装类赋值给基本类型或参与计算时,编译器可以把包装类拆箱为基本类型再进行赋值或计算,这个过程称为自动拆箱(Auto Unboxing)
package boxing;
/**
* [简要描述]:装箱和拆箱
* [详细描述]:
*
* @author Smalight Lv
* @version 1.0, 2021/4/6 10:01
* @since JDK 1.8
*/
public class AutoBoxing {
public static void main(String[] args) {
int i = 10;
Integer boxInt = i;//编译器会自动把基本类型装箱成包装类(Auto Boxing)
i = boxInt + 5;//包装类和基本类型进行计算时,编译器会把包装类拆箱成基本类型,再进行计算(Auto Unboxing)
System.out.println("i = " + i);
System.out.println("boxInt = " + boxInt);
}
}
4.包装类的比较
对于包装类的对象进行比较时不能使用 ==
,必须使用包装类的equals
方法。
package boxing;
/**
* [简要描述]:包装类的比较
* [详细描述]:
*
* @author Smalight Lv
* @version 1.0, 2021/4/6 10:32
* @since JDK 1.8
*/
public class BoxCompare {
public static void main(String[] args) {
Integer boxInt1 = 100;
Integer boxInt2 = 100;
Integer boxInt3 = 600000;
Integer boxInt4 = 600000;
System.out.println("boxInt1 == boxInt2 is " + (boxInt1 == boxInt2));
System.out.println("boxInt3 == boxInt4 is " + (boxInt3 == boxInt4));
System.out.println("boxInt1.equals(boxInt2) is " + boxInt1.equals(boxInt2));
System.out.println("boxInt3.equals(boxInt4) is " + (boxInt3.equals(boxInt4)));
}
}
从上面的例子中可以看到两个整数的包装类的值是一样的但==
比较时不一定是true,因为两个包装类可能是不同的对象,之所以用“可能不同”是因为包装类装箱时编译器是有优化的,有些相同值的包装类会使用同一个对象实例,这样可以节省空间。如果两个包装类是使用的同一个实例,那用==
比较时会返回true
,但我们不能因为存在优化就假设他们是一样的,这样的比较是不安全的。equals
方法中会对两个包装类的值进行比较就能总是得到正确的结果。
因此在比较包装类时一定要用equals
方法,而不能用==
。
5.拆箱空指针异常
包装类即然是类,他的实例对象就可能没有被实例化而是一个null值。
null值的包装类实例被赋值给基本类型时就会出现空指针异常。基本类型是不能被赋值为null的。
package boxing;
/**
* [简要描述]:空指针异常
* [详细描述]:
*
* @author Smalight Lv
* @version 1.0, 2021/4/6 10:50
* @since JDK 1.8
*/
public class BoxNullEx {
public static void main(String[] args) {
Integer boxInt = null;
int i;
i = boxInt;
System.out.println("boxInt = " + boxInt);
System.out.println("i = " + i);
}
}
运行结果:
Exception in thread "main" java.lang.NullPointerException
at boxing.BoxNullEx.main(BoxNullEx.java:17)
因为boxInt
是null
,所以i = boxInt;
这句代码出现了空指针异常
6.包装类的常见方法
方法名 | 功能 |
valueOf | 返回值为传入的基本类型的包装类实例 |
equals | 将传入的包装类和当前包装类进行比较相等返回true,否则返回false |
toString | 将包装类转换成字符串并返回 |
toHexString | 将包装类转换成16进制字符串并返回 |
byteValue | 返回包装类的byte类型值 |
shortValue | 返回包装类的short类型值 |
intValue | 返回包装类的整型值 |
floatValue | 返回包装类的浮点值 |
doubleValue | 返回包装类的double类型值 |
parseInt | 返回参数表示的整数值,默认为10进制,第二个参数为进制数 |
compareTo | 比较当前包装类和参数的大小,相等返回0,小于参数返回-1,大于参数返回1 |
package boxing;
/**
* [简要描述]:包装类常用方法
* [详细描述]:
*
* @author Smalight Lv
* @version 1.0, 2021/4/6 11:03
* @since JDK 1.8
*/
public class BoxFunction {
public static void main(String[] args) {
Integer boxInt = 1000;
System.out.println("boxInt转换成字符串:" + boxInt.toString());
System.out.println("1000转换成16制制字符串:" + Integer.toHexString(1000));
System.out.println("boxInt.compareTo(100):" + boxInt.compareTo(100));
String str = "100";
System.out.println("10进制的100转换成整型:" + Integer.parseInt(str));
System.out.println("8进制的100转换成整型:" + Integer.parseInt(str,8));
System.out.println("16进制的100转换成整型:" + Integer.parseInt(str,16));
}
}
运行结果:
boxInt转换成字符串:1000
1000转换成16制制字符串:3e8
boxInt.compareTo(100)1
10进制的100转换成整型:100
8进制的100转换成整型:64
16进制的100转换成整型:256