博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
包装类(Wrapper Class)
阅读量:2174 次
发布时间:2019-05-01

本文共 2896 字,大约阅读时间需要 9 分钟。

Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class),有些地方也翻译为外覆类或数据类型类。

包装类均位于java.lang包,包装类和基本数据类型的对应关系如下:

基本数据类型(包装类)

byte(Byte)
short(Short)
char(Character)
int(Integer)
long(Long)
float(Float)
double(Double)
boolean(Boolean)
 
在这八个类名中,除了Integer和Character类以外,其它六个类的类名和基本数据类型一致,只是类名的第一个字母大写即可。

对于包装类说,这些类的用途主要包含两种:

    a、作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。

    b、包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。

JDK自从1.5(5.0)版本以后,就引入了自动拆装箱的语法,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,这将大大方便程序员的代码书写。请看如下代码片段:

 

可见在实际使用时的类型转换将变得很简单,系统将自动实现对应的转换。

关于包装类的自动装箱与拆箱本文不作详细探讨,大家可以通过点击下面地址查看相关信息:

 

本文则主要介绍包装类与其他类的区别:

众所周知,“==”和“!=”运算符在比较2个数值型数据时,是比较它们值的大小,而在比较2个引用型数据时,则比较的是2个引用型变量是否指向同一块内存区域,即比较的是2者在内存中所在的地址。
“>”“>=”“<”“<=”是可以用来比较包装类对象的(Boolean类对象除外)。它比较的则不是包装类对象所指向内存中的地址,而是直接比较包装类的数据大小,下面来看一段代码:

由结果不难看出包装类对象在进行比较运算时,“==”和“!=”不是比较数值大小而是比较内存地址值,而“>”“>=”“<”“<=”则是直接比较数值大小。

但是普通类的对象是不允许使用“>”“>=”“<”“<=”运算符来比较大小的,下面以String类为例:

上述代码中,下面4行代码:

 System.out.println("a <= b:" + (a <= b));
 System.out.println("a >= b:" + (a >= b));
 System.out.println("a < b:" + (a < b));
 System.out.println("a > b:" + (a > b));
编译时是会报错的,错误信息如下:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
 The operator <= is undefined for the argument type(s) java.lang.String, java.lang.String
 The operator >= is undefined for the argument type(s) java.lang.String, java.lang.String
 The operator < is undefined for the argument type(s) java.lang.String, java.lang.String
 The operator > is undefined for the argument type(s) java.lang.String, java.lang.String

另外,前面有提到Boolean类对象是不能使用“>”“>=”“<”“<=”作比较的,原因很简单,查看下Boolean和其他包装类的源代码:

Boolean类源代码:
public final class Boolean implements java.io.Serializable,Comparable<Boolean>

Integer类源代码:

public final class Integer extends Number implements Comparable<Integer>

不难发现Boolean类并没有继承Number类,而其他包装类是由Number类继承来的,所以Boolean类对象是不能使用“>”“>=”“<”“<=”作比较的。在这一点上Boolean类和其他普通类没有任何区别。

转载地址:http://avzkb.baihongyu.com/

你可能感兴趣的文章
PCA 的数学原理和可视化效果
查看>>
机器学习中常用评估指标汇总
查看>>
什么是 ROC AUC
查看>>
Bagging 简述
查看>>
详解 Stacking 的 python 实现
查看>>
简述极大似然估计
查看>>
用线性判别分析 LDA 降维
查看>>
用 Doc2Vec 得到文档/段落/句子的向量表达
查看>>
使聊天机器人具有个性
查看>>
使聊天机器人的对话更有营养
查看>>
一个 tflearn 情感分析小例子
查看>>
attention 机制入门
查看>>
手把手用 IntelliJ IDEA 和 SBT 创建 scala 项目
查看>>
双向 LSTM
查看>>
GAN 的 keras 实现
查看>>
AI 在 marketing 上的应用
查看>>
Logistic regression 为什么用 sigmoid ?
查看>>
Logistic Regression 为什么用极大似然函数
查看>>
SVM 的核函数选择和调参
查看>>
LightGBM 如何调参
查看>>