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);//falseSystem.out.println(c==d);//trueSystem.out.println(a.equals(b));//true}}
