一、为什么要使用包装类?
在Java中,数据类型分为两大类,一类是基本数据类型,一类是引用数据类型。由于基本数据类型不是面向对象的,所以Java专门为八大基本数据类型提供了相对应的包装类。
我们将基本数据类型的值封装到相对应的类中,提供包装类的属性和方法,这样方便我们去操作对象。Java中有个容器叫做集合,由于集合只能存储对象类型,所以如果我们要将一些基本数据类型的数据存储到集合中,我们必须要使用基本数据的包装类。
二、八大基本数据类型对应的包装类
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
char | Character |
int | Integer |
long | Long |
double | Double |
float | Float |
boolean | Boolean |
扩展:
int类型在作为类的属性时,默认值为0,其对应的包装类Integer在作为类的属性时,默认值为null(Integer是引用数据类型,所有引用数据类型在作为类属性时,默认值都是null)。
三、包装类学习(以Integer为例)
Integer类的定义
先来看一下Integer类的部分源码:
public final class Integer extends Number implements Comparable<Integer> {
/**
* A constant holding the minimum value an {@code int} can
* have, -2<sup>31</sup>.
*/
通过查看源码可知,Integer类继承了Number类,实现了Comparable接口,也就是说,Number类中的方法可以被Integer类重写或调用,实现Comparable接口,说明Integer的对象具有比较大小的能力。
Integer类的两个构造方法
还是一样,先看一下Integer类的部分源码:
@Deprecated(since="9")
public Integer(int value) {
this.value = value;
}
/**
* 我把这里的注释给去掉了
*/
@Deprecated(since="9")
public Integer(String s) throws NumberFormatException {
this.value = parseInt(s, 10);
}
构造方法:Integer(int value)
方法描述:该方法会构造一个新分配的Integer对象,它表示指定的int值
构造方法:Integer(String s)
方法描述:该方法也会构造一个新分配的Integer对象,它表示String参数所指示的int值
Integer类的两个属性
老规矩,看一下Integer类的部分源码:
@Native public static final int MIN_VALUE = 0x80000000;
/**
* 我又把这里的注释给去掉了
*/
@Native public static final int MAX_VALUE = 0x7fffffff;
MIN_VALUE是一个常量,值为-2147483648
,它表示int类型能够表示的最小值。
MAX_VALUE也是一个常量,值为2147483647
,它表示int类型能够表示的最大值。
来一个实例:
package cn.tkr.demo;
public class Test {
public static void main(String[] args) {
//输出最小值、最大值
System.out.println("最小值:" + Integer.MIN_VALUE);
System.out.println("最大值:" + Integer.MAX_VALUE);
//最小值减一,最大值加一
System.out.println("最小值减1;" + (Integer.MIN_VALUE - 1));
System.out.println("最大值加1;" + (Integer.MAX_VALUE + 1));
}
}
运行结果:
最小值:-2147483648
最大值:2147483647
最小值减1;2147483647
最大值加1;-2147483648
最小值减一变最大值,最大值加一变最小值,什么歪理?
这个理:
从源码中可以看出,最小值和最大值采用的都是十六进制的表达形式,十六进制的最小值0x80000000减1为0x7fffffff,刚好与最大值的十六进制表示形式相同,所以最小值减1后就是最大值。同理可得,最大值加1后就是最小值。
四、Integer类的常用方法
方法:toBinaryString(int i)
返回值类型:static String
描述:得到一个int类型值的二进制字符串表示形式
方法:toOctalString(int i)
返回值类型:static String
描述:得到一个int类型值的八进制字符串表示形式
方法:toHexString(int i)
返回值类型:static String
描述:得到一个int类型值的十六进制字符串表示形式
实例:
package cn.tkr.demo;
public class Test {
public static void main(String[] args) {
//将int类型的值转换成二进制、八进制、十六进制
System.out.println(Integer.toBinaryString(12));
System.out.println(Integer.toOctalString(240));
System.out.println(Integer.toHexString(300));
}
}
运行结果:
1100
360
12c
方法:toString()
返回值类型:String
描述:重写了Object类中的方法,表示该Integer值的String对象
方法:equals(Object obj)
返回值类型:boolean
描述:重写了Object类中的方法,用来比较两个Integer对象的值是否相等
方法:compareTo(Integer another)
返回值类型:int
描述:实现了Comparable接口中的方法,用来比较两个Integer对象的值的大小,返回值是-1、0、1
实例:
package cn.tkr.demo;
public class Test {
public static void main(String[] args) {
//创建两个对象a和b
Integer a = new Integer(124);
Integer b = new Integer("124");
System.out.println(a.toString()); //调用toString方法
System.out.println(b); //按正常输出的是地址值,但是Integer类重写了Object类的toString方法,所以输出的是字符串
System.out.println(a==b); //比较的是地址值(这是两个不同对象,输出结果是false)
System.out.println(a.equals(b)); //比较的是对象的值(输出true),
Integer c = new Integer(100);
System.out.println(a.compareTo(c)); //输出-1
System.out.println(a.compareTo(b)); //输出0
}
}
运行结果:
124
124
false
true
1
0
方法:valueOf(int i)
返回值类型:static Integer
描述:得到一个int类型值的Integer类型的对象
方法:valueOf(String s)
返回值类型:static Integer
描述:得到一个String类型所表示的Integer类型的对象
方法:intValue()
返回值类型:int
描述:得到一个int类型的Integer对象的值
方法:parseInt(String s)
返回值类型:static int
描述:得到一个String对象所表示的int类型的值
实例:
package cn.tkr.demo;
public class Test {
public static void main(String[] args) {
Integer i = new Integer(10);
Integer a = Integer.valueOf(124);
Integer b = Integer.valueOf("124");
int c = i.intValue();
int d = Integer.parseInt("123");
System.out.println(a + "\n" + b + "\n" + c + "\n" + d);
}
}
运行结果:
124
124
10
123
五、总结
以上是关于Java中基本数据类型的包装类,分享给大家。如果觉得还不错的话,就送我一个赞吧!如果本文对你有用的话,也欢迎收藏哦!