目录
1.为什么会有包装数据类型
Java中的基础数据类型与包装数据类型:
基础数据类型 | 包装数据类型 |
int | Integer |
short | Short |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
byte | Byte |
Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。
另外,当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的包装器类了。
2.两者的区别
(1)包装数据类型可以为null,基础数据类型不能为nul
int a=null; //提示:Type mismatch: cannot convert from null to int
Integer A=null;
System.out.println(a);
System.out.println(A);
包装类型可用于 POJO 中,而基本类型则不行。原因是:数据库的查询结果可能是 null,如果使用基本类型的话,因为要自动拆箱(将包装类型转为基本类型,比如说把 Integer 对象转换成 int 值),就会抛出NullPointerException 的异常
(2)包装类型可以用于泛型,基础数据类型不可以
List<int> listint=new LinkedList<>(); // 提示:Syntax error, insert "Dimensions" to complete ReferenceType
List<Integer> listInteger=new LinkedList<>();
因为泛型在编译时会进行类型擦除,最后只保留原始类型,而原始类型只能是 Object 类及其子类。
(3)存储方式与位置不同
基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后通过引用来使用。所以在效率上,使用基础类型更加高效,因为包装数据类型需要占用更多的内存空间。由此可知,基础类型和包装类型在数值上可能相等,但是实际两者不相等。
3.包装数据类型的相关方法
因为包装数据类型有其单独的类,类中包含许多处理数据的方法,接下来就以Integer类为例,介绍其中的部分常用方法。
(1)转换为字符串方法
toString | 将类型转换为指定进制字符串类型 |
toBinaryString | 将类型转换为二进制字符串类型 |
toOctalString | 将类型转换为八进制字符串类型 |
toHexString | 将类型转换为四六进制字符串类型 |
Integer num=10;
String string = Integer.toString(num); //10
String string2 = Integer.toBinaryString(num); //1010
String string3 = Integer.toOctalString(num); //12
String string4 = Integer.toHexString(num); //a
String string5 = Integer.toString(num,2); //1010
(2)字符串转换为整形方法
parseInt | 将字符串类型转换为Integer类型 |
valueOf | 将字符串类型转换为其他类型 |
String str="100";
Integer num=Integer.parseInt(str);
Integer num1=Integer.valueOf(str);
System.out.println(str); //100
System.out.println(num); //100
System.out.println(num1);//100
(3)比较数据方法
compare | 比较两个数据的大小,大于输出1,小于输出-1,等于输出0 |
min | 比较两个数据的大小,输出较小的数值 |
max | 比较两个数据的大小,输出较大的数值 |
Integer num1=10;
Integer num2=20;
Integer num3=10;
System.out.println(Integer.compare(num1, num2)); //-1
System.out.println(Integer.compare(num1, num3)); //0
System.out.println(Integer.compare(num2, num1)); //1
System.out.println(Integer.max(num1, num2));//20
System.out.println(Integer.min(num1, num2));//10