Java面向对象编程-包装类

包装类

1、包装类具体内容

包装类的主要功能是针对于基本数据类型的对象转换而实现的,并且随着JDK版本的更新,包装类的功能也在发生着改变,有着更多的支持
Object类最大的特点是所有类的父类,并且可以接收所有的数据类型,但是在这个过程之中就存在有个问题:

  • 基本数据类型并不是一个类,现在如果想要将基本数据类型以类的形式进行处理,那么就需要对其进行包装
public class JavaDemo{
	public static void main(String [] args){
		Object obj= new Int(10) ;	//装箱:将基本数据类型保存在包装箱中
		int x = ((Int)obj).intValue() ;	//拆箱:从包装类对象中获取基本数据类型
		System.out.println(x * 2) ;
	}
}
class Int{
	private int data ; 
	public Int(int data) {
		this.data = data ;
	}
	public int intValue(){
		return this.data ;
	} 
}

基本数据类型进行包装处理后可以像对象一样进行引用传递,同时也可以使用Object类来进行接收,但是如果我们都已经可以发现基本数据类型与Object类型之间的缺陷
那么JDK也早就发现了同样的问题,所以在JDK1.0后,就提供了基本数据类型的包装类
基本数据类型的包装类一共有八中
现在可以发现,Java中包装类一共提供有两种类型:

  • 对象型包装类(Object直接子类):Boolean、Character
  • 数值型包装类(Number直接子类):Byte、Shout、Integet、Long、Float、Double
    Number是抽象类,其中的常用抽象方法:
  • public byte byteValue() 普通方法 从包装类中获取byte数据
  • public shout shoutValue() 普通方法 从包装类中获取short数据
  • public abstract int intValue() 普通方法 从包装类中获取int数据
  • public abstract long longValue() 普通方法 从包装类中获取long数据
  • public abstract float floatValue() 普通方法 从包装类中获取float数据
  • public abstract doubleValue() 普通方法 从包装类中获取double数据

Number类中的方法就是直接提供有获取包装类中基本数据类型的功能,一共只定义有6种基本方法

2、包装类的装箱与拆箱

基本数据类型的包装类都是为了基本数据类型转为对象提供的,这样对于基本类型与包装类之间就有了如下的操作关系:

  • 数据装箱:将基本数据类型保存到包装类之中,一般可以利用构造方法完成
    • Integer 类 public Integer(int value)
    • Double 类 public Double(double value)
    • Boolean 类 public Boolean (boolean value)
  • 数据拆箱:从包装类中获取基本数据类型
    • 数值型包装类已经由Number类定义了拆箱的方法了
    • Boolean型:public boolean booleanValue()

例1 -Integer

public class JavaDemo{
	public static void main(String [] args){
		Integer obj= new Integer (10) ;	//装箱:将基本数据类型保存在包装箱中
		int x = obj.intValue() ;		//拆箱:从包装类对象中获取基本数据类型
		System.out.println(x * 2) ;
	}
}

例2 -Double

public class JavaDemo{
	public static void main(String [] args){
		Double obj= new Double (10) ;	//装箱:将基本数据类型保存在包装箱中
		double x = obj.doubleValue() ;		//拆箱:从包装类对象中获取基本数据类型
		System.out.println(x * 2) ;
	}
}

例3 -Boolean

public class JavaDemo{
	public static void main(String [] args){
		Boolean obj= new Boolean (true) ;	//装箱:将基本数据类型保存在包装箱中
		boolean x = obj.booleanValue() ;		//拆箱:从包装类对象中获取基本数据类型
		System.out.println(x) ;
	}
}

在JDK1.9之后,对于所有包装类之中提供的构造方法就变为了过期处理,不建议用户使用了,这是因为从JDK1.5之后为了方便处理,提供了自动的装箱与拆箱操作,所以这种手工的模式基本没人用了
自动的装箱与拆箱:

public class JavaDemo{
	public static void main(String [] args){
		Integer obj = 10 ;		//自动装箱,不再关心构造方法
		int num = obj ;		//自动拆箱
		obj ++ ;			//包装类对象可以直接参与数学运算
		System.out.println(num * obj) ;//直接参与数学运算
	}
}

除了提供这种自动的数学运算支持之外,使用自动装箱最大的好处是可以实现Object接收基本数据类型的操作
Object接收小数:

public class JavaDemo{
	public static void main(String [] args){
		Object obj = 19.2 ;		//double自动装箱为Double,向上转型为Object
		double num = (Double) obj ;	//向下转型为包装类,再自动拆箱
		System.out.println(num * 3) ;//直接参与数学运算
	}
}

JDK1.5之后提供的自动支持功能,到了JDK1.9之后为了巩固概念,所以将包装类的构造方法都设置为了过期定义了
但是对于包装类需要注意一些问题,关于相等判断

public class JavaDemo{
	public static void main(String [] args){
		Integer x = 128 ;
		Integer y= 128 ;
		System.out.println(x.equals(y)) ;
	}
}

以后进行包装类相等判断的时候一定要使用equals()来完成,二包装类本身也需要考虑占位的长度,如果占位超过了一位,那么就需要使用equals()来进行比较,如果不超过一位,使用 == 比较即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MyRedScarf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值