基本数据类型的包装类【Java】

前言

Java语言提供了8种基本数据类型,这些数据类型不属于Java的对象层次结构。Java提供了一组基本数据类型的包装类,通过这些类可以将基本类型的数据包装成对象。

表1 基本数据类型与包装类
基本数据类型 对应的包装类
boolean Boolean
byte Byte
char Character
short Short

int

Integer
long Long
float Float
double Double

数据类型包装类有自己的方法,这些方法主要用来操作和处理对应的数据,利用基本数据类型来定义简单的变量很方便,但是如果需要完成一些数据的变换和操作,就需要使用数据类型包装类中定义的方法。

1、Number类及其子类

在8种数据类型包装类中,除了Character和Boolean是Object类的直接子类外,其他6个类都涉及数值并且都是抽象类Number类的直接子类。Number类中定义了如下6个方法

public byte byteValue()//返回byte类型的数值
public short shortValue()//返回short类型的数值
public abstract int intValue() //返回int类型的数值
public abstract long longValue() //返回long类型的数值
public abstract float floatValue() //返回float类型的数值
public abstract double doubleValue() //返回double类型的数值

这些方法都在子类中得到了实现,它们用来将对象表示的数值转换为基本数据类型byte、short、int、long、float、double

2、数值类的构造方法

6种数值型包装类都有两个构造函数:一个以该类型的基本数据类型作为参数,另一个以一个字符串作为参数

对Double类来说有下面两个构造方法
public Double(double value)//使用一个double类型的值创建一个Double对象
public Double(String s) //通过一个字符串创建一个Double对象,如果字符串不能转换成相应的数值,则抛出NumberFormatException

注意:每种包装类型的对象中所包装的值是不可改变的。要改变对象中的值必须重新生成新的对象。每种包装类型都覆盖类toString()方法和equals()方法,因此使用equal()方法比较包装类型的对象时是比较内容或所包装的值

3.数值类的常量

每个数值包装类都定义了SIZE、MAX_VALUE、MIN_VALUE常量。SIZE表示每种类型的数据所占的位数。MAX_VALUE表示对应基本类型数据的最大值。对于Byte、Short、Integer、Long来说,MIN_VALUE表示byte、short、int、long类型的最小值。对于Float、Double来说,MIN_VALUE表示float和double型的最小正值。除了上面的常量外,在Float和Double类中还分别定义了POSITIVE_INFINITY、NEGATIVE_INFINITY、NaN(not a number),它们分别表示正、负无穷大和非数值

4.类型转换方法

基本数据类型、基本数据类型包装类和字符串是不同的类型,在编程中经常需要在包装类、基本数据类型和字符串之间进行转换。

(1)将数值型对象转换为基本数据类型。由于每个数值包装类都实现了Number类中的抽象方法byteValue()、shortValue()、intValue()、longValue()、floatValue()、doubleValue(),使用这些方法可以将一个包装类转换为相应的基本数据类型,例如:

Double doubleObject=new Double(3.14);
//把一个Double型对象doubleObject包装的值转换为int型变量,这里隐含进行了强制类型转换。
int i=doubleObject.intValue();

(2)将字符串转换为某种基本数据类型的数据。用下列方法将“123”转换为整数123,调用相应包装类的parseXxx()静态方法实现

public static byte parseByte(String str);
public static short parseShort(String str);
public static int parseInt(String str);
public static long parseLong(String str);
public static float parseFloat(String str);
public static double parseDouble(String str);

长度为1的字符串转换为字符型数据

String s="A";
char c=s.charAt(0);

对于布尔型数据,转换方法如下

String s="TRUE";
boolean b;
Boolean B=new Boolean(s);
b=B.booleanValue();

(3)基本数据类型转换为字符串。

基本数据类型转换为字符串可以使用对应包装类中定义的带参数的toString()静态方法,使用该方法可以将一个基本数据类型转换为字符串

public static String toString(char c);
public static String toString(byte b);//在Byte类中定义的
public static String toString(short s)
public static String toString(int i);
public static String toString(long l);
public static String toString(float f);
public static String toString(double d);
public static String toString(boolean b);//在Boolean类中定义

5、自动装箱与拆箱

自动装箱是指基本数据类型的数据可以自动转换为包装类的实例,自动拆箱是指包装类的实例自动转换为基本数据类型的数据

例如

该复制语句将基本数据类型3自动转换为包装类型,然后复制给包装类的变量val
Integer val=3; 
int x=val;
它把Integer类型的变量val中的数值3解析出来,然后复制给基本数据类型的变量x,它与下面的语句等价
int x=val.intValue();

自动装箱和自动拆箱在很多上下文环境中都是自动应用的。除了上面的赋值语句外,在方法参数传递中也适用,例如,当方法需要一个包装类对象时,可以传递给它一个基本数据类型,传递的基本类型将自动转换为包装类。需要注意的是,这种自动转换不是在任何情况下都能进行的,例如,对于上面的基本数据类型的变量x,表达式x.toString()就不能通过编译,但可以通过先对其进行强制类型转换来解决这个问题,例如

//将x强制转换为Object类型,然后再调用其toString()方法
((Object)x).toString();

由于包装类的对象是不可变的,并且两个具有相同值的对象可能是不同的,因此,在Java语言中存在着这样一个事实:对于某些类型来说,对相同值的装箱转换总是产生相同的值,这些类型包括boolean、byte、char、short和int。例如,假设有如下方法

static boolean sameAgrs(Integer a,Integer b){
	return a==b;
}

调用sameAgrs(3,3);返回true
调用sameAgrs(3,new Integer(3));返回false,因为3转换的包装类对象与包装类对象Integer(3)是不同的对象

猜你喜欢

转载自blog.csdn.net/SongBai1997/article/details/83023934