【Java 基础】包装类 概述、相关介绍

一、概述

  • java并非纯面向对象的语言,这是因为java中的基本数据类型却不是面向对象的。
  • 但是我们在实际使用中经常将基本数据类型转换成对象,所以我们用到了包装类。
基本数据类型包装类
byteByte
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean

二、对象创建方法

  • 与String类似,包装类的对象有两种不同的创建方法。

下面我们以Intenger为例进行,介绍:

Integer i = 3;					// “看起来” 符合日常习惯的创建方法(类似基本数据类型的方式创建变量)
Integer i = new Integer(3);		// 传参创建方法

第一种创建方法(以类似基本数据类型的方式创建变量):

  • 我们可以看到,这两种不同的创建方式,与String类似,当使用第一种方法创建时,会先去常量池Integer 类型 的 常量池范围为 -128~127,只有这个范围的数组可以进入常量池)查看是否已有等值的变量,已有则不会新创建(所以地址一样,使用 “==” 时才会得到true),否则就在常量池新创建一个变量。(不懂的同学可以看看博主 String类介绍 中,equals下的 < 创建字符串的相关事项 >
  • 此举可以减少同值对象的频繁创建,减少了对内存的占用,适用于无需必须创建新变量的情况。

第二种创建方法(以 "new"关键字 创建对象):

三、Number抽象类

  • Number抽象类是 包装类 Byte、Integer、Double、Float、Short、Long 和 大数类 BigInteger、BigDecimal的父类。
    类关系

→ 抽象方法xxxValue()

  • Number抽象类,除构造方法外,还拥有6个特殊的抽象方法,负责返回相应的值。
  • Number的子类,全部都实现了这些方法,这也方便了它们之间的互相转换。
  • 这些方法的默认返回值为对应的基本数据类型。
    方法
  • 我们以Integer的doubleValue方法为例,可以看到,帮我们进行了强制类型转换,十分方便。
    Integer——doubleValue
    这些方法是这六个类都拥有的方法,尽管它们的实现方式不尽相同,其功能是为了方便类型间相互转换。

另外Character、Boolean也有类似的方法:charValue()、booleanValue(),可获取其对应基本类型的值,但它们并不拥有上面的六个实现方法,反之亦然。

四、同名方法

顾名思义,共有方法就是这些包装类都拥有的方法,尽管它们的实现方式不尽相同,

① equals

  • 包装类重写了equals方法,它们的用法与String类似,可以比较两个值是否相等。
  • 避免了使用 运算符 “==” 时,只比较被引用对象地址的尴尬局面(两种创建方式的区别得以体现)。

这里,我么依旧以Integer为例:

//以类似基本数据类型的方式创建变量
Integer i1 = 1;
Integer i2 = 1;
//第一种创建方式自身
System.out.println("第一种创建方式自身,使用 == :" + (i1==i1));
System.out.println("第一种创建方式自身,使用equals:" + i1.equals(i1));
System.out.println("-----------------------------------------------------");
//第一种创建方式之间
System.out.println("第一种创建方式之间,使用 == :" + (i1==i2));
System.out.println("第一种创建方式之间,使用equals:" + i1.equals(i2));
System.out.println("-----------------------------------------------------");
//以"new"关键字创建对象
Integer i3 = new Integer(1);
Integer i4 = new Integer(1);
//第二种创建方式自身
System.out.println("第二种创建方式自身,使用 == :" + (i3==i3));
System.out.println("第二种创建方式自身,使用equals:" + i3.equals(i3));
System.out.println("-----------------------------------------------------");
//第二种创建方式之间
System.out.println("第二种创建方式之间,使用 == :" + (i3==i4));
System.out.println("第二种创建方式之间,使用equals:" + i3.equals(i4));
System.out.println("-----------------------------------------------------");
//第一种创建方式 与 第二种创建方式
System.out.println("第一种创建方式 与 第二种创建方式,使用 == :" + (i1==i3));
System.out.println("第一种创建方式 与 第二种创建方式,使用equals:" + i1.equals(i3));

运行结果如下:
运行结果
通过运行结果,我们可以很明确的分析出两种创建方式的本质区别。

② compareTo

  • 与String比较整体所有字符差值的和类似,若对应基本数据类型为整数类型,它返回调用者与参数相比的差值;若对应基本数据类型为其他类型(包括浮点型),调用者大返回1相等返回0否则放回-1
  • 我们分别以Integer、Character、Doube、Boolean为例:

1、比较Integer对象(返回差值):

//比较Integer对象的差值(i1与i2相比)
Integer i1 = 3;
Integer i2 = 4;
System.out.println("比较Integer对象的差值(i1与i2相比):" + i1.compareTo(i2));

运行结果如下:
Integer
2、比较Character对象(返回差值):

//比较Character对象的差值(c1与c2相比)
Character c1 = 'a';
Character c2 = 'z';
System.out.println("比较Character对象的差值(c1与c2相比):" + c1.compareTo(c2));

运行结果如下:
Character

3、比较Double对象(返回 “大小值” ):

//比较Double对象
Double d1 = 1.25;
Double d11 = 1.25;
Double d2 = 10000.26;
System.out.println("比较Double对象的大小(d1与d2相比):" + d1.compareTo(d2));
System.out.println("比较Double对象的大小(d1与d11相比):" + d1.compareTo(d11));

运行结果如下:
Double

4、比较Boolean对象(返回 “大小值” ):

//比较Boolean对象的大小
Boolean b1 = true;
Boolean b11 = true;
Boolean b2 = false;
System.out.println("比较Boolean对象的大小:" + b1.compareTo(b2));
System.out.println("比较Boolean对象的大小:" + b1.compareTo(b11));

Boolean

  • 无论是返回差值、大小值,我们都可以通过 if、while (条件判断)语句 结合">" “>=” “<” “<=” "=="与 0 比较,来确定两方的大小。
//比较Double对象的大小
Double d1 = 1.25;
Double d2 = 10000.26;
if(d1.compareTo(d2) > 0){
	System.out.println("d1大于d2");
}else if(d1.compareTo(d2) == 0){
	System.out.println("d1等于d2");
}else{
	System.out.println("d1小于d2");
}

运行结果如下:
运行结果

③ xxxValue

  • 该方法方便了数字类型间的类型转换,也方便所有类型获取对应基本数据类型的值。
返回值基本数据类型对应方法
intintValue()
doubledoubleValue()
floatfloatValue()
bytebyteValue()
shortshortValue()
longlongValue()
charcharValue()
booleanbooleanValue()

具体使用如下:

//Integer
Integer i = 3;
System.out.println("Integer --> intValue : " + i.intValue());
System.out.println("Integer --> doubleValue : " + i.doubleValue());
//Character
Character c = 'z';
System.out.println("Character --> charValue : " + c.charValue());
//Double
Double d = 3.14;
System.out.println("Double --> doubleValue : " + d.doubleValue());
System.out.println("Double --> intValue : " + d.intValue());

运行结果如下:
运行结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值