Object类最大的特点是所有类的父类,并且可以接收所有的数据类型。但是基本数据类型并不是类(int等),所以想要将基本数据类型以类的形式进行处理需要对其进行包装。
以int为例实现一个包装处理:
class Int{
private int data;//包装一个基本数据类型
public Int(int data){
this.data = data;
}
public int intValue(){
return this.data;
}
}
public class JavaDemo{
public static void main(String args[]){
Object obj = new Int(10);//装箱
int x = (Int)obj.intValue();//拆箱
System.out.println();
}
}
基本数据类型进行包装处理后可以像对象一样进行引用传递,同时也可以使用Object类进行接收。
包装类分为两种:
1.对象型包装类(Object直接子类):Boolean、Character
2.数值型包装类(Number类(抽象类)):Byte、Short、Integer、Long、Float、Double
Number是一个抽象类,常用方法:
1.public byte byteValue()->从包装类中获取byte数据
2.public byte shortValue()->从包装类中获取short数据
3.public byte intValue()->从包装类中获取int数据
4.public byte longValue()->从包装类中获取long数据
5.public byte floatValue()->从包装类中获取float数据
6.public byte doubleValue()->从包装类中获取double数据
装箱与拆箱操作
1.数据装箱:
将基本数据类型保存到包装类之中,一般可以利用构造方法来完成。
Double b = new Double(1.0);
2.数据拆箱:
数值型包装类已经由Number类定义好拆箱的方法了。
JDK1.9之后,对于包装类提供的构造方法就变成了过期处理,不建议用户再继续使用。
JDK1.5之后提供了自动的装箱和拆箱。所以手工模式基本没人用了。
class Untitled {
public static void main(String[] args) {
Integer obj = 5;//自动装箱
int num = obj;//自动拆箱
obj++;//包装类对象可以直接参与数学运算。
System.out.println(num * obj);//30
}
}
包装类需要注意:
-128 ~ 127是byte范围,==有效。
-129或者更小,128或者更大不能再用 == 来进行比较大小,
所以包装类要进可能用equals比较
class Untitled {
public static void main(String[] args) {
Integer a = 128;
Integer b = 128;
Integer c = 127;
Integer d = 127;
System.out.println(a==b);//false
System.out.println(c==d);//true
System.out.println(a.equals(b));//true
}
}