包装类及泛型

一、包装类

1.包装类的引入

包装类:就是把8大基本类型封装到类之中

A.Object类可以接收所有引用数据类型(数组,类,接口),为了让Object类可以接收Java中一切内容,引入包装类,把基本类型的数值封装到类的对象之中,就产生了包装类。

B.基本类型的默认值其实在很多场景下会造成误导哦,引用类型的默认值就是null
Double -> 0.0
现在有一个扣费的需求,当前费用 * 当前费率(打几折) = 实际扣款数
如果费率使用double类型,默认值0.0,这样对于该需求会产生歧义
但如果使用的是double的包装类Double,默认值就是null

JDK中的包装类有以下8种:
数值型包装类(Number的子类):

整型:byte < short < int < long
对于的包装类:Byte < Short < Integer < Long

浮点型:float < double
对于的包装类:Float < Double

char类型的包装类:Character

boolean类型的包装类:Boolean

二、包装类的使用

以整型为例:
Int -> Integer
在这里插入图片描述

装箱:将基本类型的数值保存到包装类对象中。
拆箱:将包装类对象中的数值还原为基本类型。
自动拆装箱:Java编译器的优化,使用包装类就和使用基本类型一样。

在这里插入图片描述
有了自动拆装箱,使用包装类就和使用基本类型完全一致。

但是有两点不同:
A.默认值不同!包装类的默认值都是null,基本类型的默认值就是其数据类型默认值
Integer,Double -> null
Int -> 0
Double -> 0.0

B.比较相等,仍然使用equals方法比较,所有类对象的比较都使用equals方法!
在这里插入图片描述
注意:
当使用整型包装类的自动拆装箱时,JVM会缓存相应的数值
Integer常量池,默认在-128到127之间的取值,都会缓存到常量池中
在这里插入图片描述
只要是引用类型的比较,一律使用equals方法,咋样都不会错!!!
阿里编码规范:所有POJO(普通)类的成员变量一律使用包装类替代基本类型

二、泛型

定义泛型对象时,只能使用类,基本类型不能保存到泛型中,必须使用包装类

1.泛型的引出

Point{
x;
y;
}
x = 10 ; y = 20;
x = 10.1 ; y = 20.2;
x = “东经15度” y = “北纬39度”
Java是强类型语言,在定义x和y的时候必须强制定义变量类型
可以使用Object类定义变量,这样可以接收所有类型
在这里插入图片描述
当用户不小心输入的x和y是不同类型时,编译没问题,但是取出x和y时,强制类型转换就会报错,运行时异常
在这里插入图片描述
一般来说,我们要求把所有的错误都提前暴露在编译阶段,程序还没跑起来就能发现错误。

2.引入泛型

泛型:(守门员,编译阶段检查类型是否一致的手段)

所谓的泛型指的是在类定义时不明确类型,在使用时明确类型。

定义泛型使用"<>"操作符
在这里插入图片描述
称之为类型参数
可以使用任何字符,规范是单个的大写字母
T:表示任意类型
K:键值对,key值
V:value值
E:单个元素
在这里插入图片描述
使用泛型的类:
在这里插入图片描述
当产生MyPoint对象时,此时将T这个类型参数替换为明确的类型String
在这里插入图片描述
在这里插入图片描述
我们发现,引入泛型后,可以在编译阶段检查设置的类型值是否是指定类型,若不一致,编译报错
取出值时,就无需进行强转

我们就可以使用泛型来改造我们的动态数组和链表
之前保存的只能是int,当由泛型以后,我们可以保存任意类型。

若泛型类中存在多个类型参数,成员变量的类型不一定一致。
在这里插入图片描述
使用不同的大写字母指代不同类型,产生对象时,T和E的类型可以相同也可以不同
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值