Java的包装类特性总结
作者:一一哥Sun
一. 包装类
1. 概念
我们知道,Java中的数据类型总体上分为基本数据类型和引用数据类型。引用类型的数据可以通过对象操作的形式进行使用,也就是说,我们可以通过对象的属性和方法来进行操作。但如果是基本数据类型的数据,我们能不能像操作对象那样来操作呢?为了实现这个目标,Java为8种基本数据类型分别设计了对应的类,我们称其为包装类(Wrapper Classes ) ,或者称其为外覆类或数据类型类。因为这些包装类都是引用类型,所以我们就可以方便地操作这些数据的属性和方法了。
其实之所以为8种基本数据类型都设计出对应的包装类,从深层分析,主要是为了配合Java 5之后出现的泛型。 在泛型的使用中,基本数据类型和泛型不能配合使用,即Primitive Types 和Generic不能混用。举个简单的例子,比如我们想使用ArrayList、HashMap等集合时,这些集合都需要指明集合中数据的泛型。而int、double等基本类型是不允许被使用的,因为这些集合容器的泛型都必须是Object类型,所以就需要这些包装类型了,如下图所示:
2. 8个包装类
有了这8个包装类,我们就可以按照面向对象的思维来操作数据了,可以操作对象的属性和方法,也可以给对象赋null值,这是基本类型做不到的。我们来看看Java中的基本类型与其对应的包装类,如下表所示:
基本类型 | 包装类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
从上面的表中我们可以看出,基本上包装类的类名,就是把基本类型的首字母变成大写,除了Integer和Character特殊一点。另外,Byte、Short、Integer、Long、Float、Double这六个类,都是Number的子类,它们具有一些共同的类型转换方法,方便我们进行类型之间的转换。
二. 常用包装类
为了让大家更好地掌握这些包装类的用法及特性,壹哥在这里只把几个常用的包装类给大家介绍一下。
1. Integer简介
Integer类中包含了一个int类型的字段。该类提供了一些可以方便处理int类型的常量,比如获取整型的最大值和最小值等。另外该类还提供了多个方法,可以在 int类型和 String类型之间互相转换。
1.1 Integer中的常量
Integer类包含以下4个常量:
- MAX_VALUE:是一个常量值,值为 231-1,代表int类型能够表示的最大值;
- MIN_VALUE:是一个常量值,值为 -231,代表int类型能够表示的最小值;
- SIZE:以二进制补码的形式,表示 int值的比特位数;
- TYPE:代表基本类型 int 的 Class 实例对象。
1.2 Integer中的方法
Integer类中提供的常用方法如下表所示:
方法 | 返回值 | 功能 |
---|---|---|
byteValue() | byte | 转换为byte类型 |
shortValue() | short | 转换为short类型 |
intValue() | int | 转换为int类型 |
toString() | String | 转换为String类型 |
equals(Object obj) | boolean | 比较此对象与指定对象是否相等 |
compareTo(Integer anotherlnteger) | int | 比较两个 Integer对象的数值大小,如相等,则返回 0; 如调用对象的数值小于 anotherlnteger,则返回负值; 如调用对象的数值大于 anotherlnteger,则返回正值 |
valueOf(String s) | Integer | 将String类型的数值转为 Integer对象 |
parseInt(String s) | int | 将String字符串转为 int 数值 |
我们要注意,在将字符串转换为 int类型数值的过程中,如果字符串为非数值型的内容,转换时可能会出现NumberFormatException异常。
2. Byte简介
Byte类中内含了一个byte类型的字段,该类提供了一些可以方便处理byte值的常量和方法,方便了我们的操作。
2.1 Byte中的常量
Byte类中提供的常量如下:
- MIN_VALUE:byte类的最小值,-128;
- MAX_VALUE:byte类的最大值,127;
- SIZE:以二进制补码形式表示的 byte值位数;
- TYPE:表示byte的Class实例对象。
2.2 Byte中的方法
Byte类中的常用方法如下:
方法 | 返回值 | 功能 |
---|---|---|
byteValue() | byte | 转换为byte类型 |
compareTo(Byte bytel) | int | 比较两个byte值的大小 |
doubleValue() | double | 转换为double类型 |
intValue() | int | 转换为int类型 |
parseByte(String s) | byte | 将String类型值转为Byte类型 |
toStringO | String | 将 byte值转为String字符串 |
valueOf(String s) | Byte | 将String字符串转为Byte对象 |
equals(Object obj) | boolean | 比较两个对象是否相等,如果调用该方法的对象与obj相等则返回 true,否则返回false |
3. Float简介
Float类中内含了一个float类型的字段,该类提供了一些可以方便处理float值的常量和方法,方便了我们的操作。
3.1 Float中的常量
Float类的常量值如下所示:
- MAX_VALUE:表示float的最大值,为 1.4E38;
- MIN_VALUE:表示float的最小值,为3.4E-45;
- MAX_EXPONENT:float变量可能具有的最大指数;
- MIN_EXPONENT:float变量可能具有的最小指数;
- MIN_NORMAL:保存float类型值的最小标准值常量,即 2-126;
- NaN:保存float类型的非数值常量;
- SIZE:以二进制补码形式表示的float值的比特位数;
- TYPE:表示float类型的Class对象实例。
3.2 Float中的方法
Float类中的常用的方法如下表所示:
方法 | 返回值 | 功能 |
---|---|---|
byteValue() | byte | 转为byte类型 |
doubleValue() | double | 转为double类型 |
floatValue() | float | 转为float类型 |
intValue() | int | 强制转换为int类型 |
longValue() | long | 强制转换为long类型 |
shortValue() | short | 强制转换为short类型 |
isNaN() | boolean | 判断该值是否为非数字值,如果是则返回true,否则返回false |
isNaN(float v) | boolean | 如果指定的参数是一个非数字值,则返回 true,否则返回 false |
toString() | String | 将Float值转为 String对象 |
valueOf(String s) | Float | 将String转为Float对象 |
parseFloat(String s) | float | 将String转为float数值 |
4. Double简介
Double类中内含了一个double类型的字段,该类提供了一些可以方便处理double值的常量和方法,方便了我们的操作。
4.1 Double中的常量
Double类中的常量如下所示:
- MAX_VALUE:表示double类型的最大值,1.8E308;
- MIN_VALUE:表示double类型的最小值,4.9E-324;
- NaN:表示double类型的非数字值;
- NEGATIVE_INFINITY:表示double类型负无穷大的常量值;
- POSITIVE_INFINITY:表示double类型正无穷大的常量值;
- SIZE:以二进制补码形式表示的double值的比特位数;
- TYPE:表示double类型的Class实例对象。
4.2 Double中的方法
Double类中的常用方法如下表所示:
方法 | 返回值 | 功能 |
---|---|---|
byteValue() | byte | 转为byte类型 |
doubleValue() | double | 转为double类型 |
fioatValue() | float | 转为float类型 |
intValue() | int | 强制转换为int类型 |
longValue() | long | 强制转换为long类型 |
shortValue() | short | 强制转换为short类型 |
isNaN() | boolean | 如果该值是一个非数字值则返回true,否则返回false |
isNaN(double v) | boolean | 如果指定的参数是一个非数字值则返回 true,否则返回 false |
toString() | String | 将Double值转为String字符串 |
valueOf(String s) | Double | 将String值转为Double对象 |
parseDouble(String s) | double | 将数字字符串转换为Double值 |
5. Character简介
Character类用于对单个字符进行操作,内含了一个char类型的字段,该类提供了一些可以方便处理char值的方法,方便了我们的操作。
5.1 Character中的方法
Character类中的常用方法如下表所示:
方法 | 描述 |
---|---|
void Character(char value) | 构造一个新的Character对象,表示指定的char值 |
char charValue() | 返回该Character对象的值 |
int compareTo(Character anotherCharacter) | 比较两个Character对象的大小 |
boolean equals(Character anotherCharacter) | 将该对象与指定对象比较,当且仅当参数不是null,且此对象 与该Character对象相同时,结果为true |
boolean isDigit(char ch) | 判断指定字符是否为数字 |
boolean isLetter(int codePoint) | 判断指定的字符是否为字母 |
boolean isLetterOrDigit(int codePoint) | 判断指定的字符是否为字母或数字 |
boolean isLowerCase(char ch) | 判断指定的字符是否为小写字母 |
boolean isUpperCase(char ch) | 判断指定的字符是否为大写字母 |
char toLowerCase(char ch) | 将指定的字符参数转为小写 |
char toUpperCase(char ch) | 将指定的字符参数转为大写 |
5.2 代码案例
Character类的方法比较多,壹哥给大家设计了如下代码案例进行演示:
/** * @author */ public class CharacterTest { public static void main(String[] args) { //构造一个Character对象,该方式已过时 Character character = new Character('A'); //比较两个对象是否相同,0表示相同;正数表示前者大于后者;负数表示前者小于后者 int result = character.compareTo(new Character('B')); System.out.println(result); // 输出 -1,表示A小于B //获取Character对象的第2种方式,注意参数必须是单引号括起来的字符型, Character char02 = Character.valueOf('B'); //获取Character对象的第3种方式,常用该方式 Character char03='C'; //将大写字符转为小写字符 char lowerCase = Character.toLowerCase('Y'); System.out.println("lowerCase="+lowerCase); String str="hello666"; for(int i=0;i<str.length();i++) { //判断每一个字符是否是字母 boolean isLetter = Character.isLetter(str.charAt(i)); System.out.println(str.charAt(i)+", 是字母吗?="+isLetter); } } }
6. Boolean简介
Boolean类中内含了一个boolean类型的字段,该类提供了一些可以方便处理boolean值的常量和方法,方便了我们的操作。
6.1 Boolean中的常量
Boolean类包含的常量如下所示:
- TRUE:代表值为true的常量;
- FALSE:代表值为false的常量;
- TYPE:表示boolean类型的Class实例对象。
6.2 Boolean中的方法
Boolean类中常用的方法如下表所示:
方法 | 返回值 | 功能 |
---|---|---|
booleanValue() | boolean | 转为boolean类型 |
equals(Object obj) | boolean | 判断调用该方法的对象与obj是否相等。当参数不是null,且与调用该方法的对象相同时则返回true |
parseBoolean(String s) | boolean | 将String字符串参数转为 boolean值 |
toString() | String | 返回表示该boolean值的String字符串 |
valueOf(String s) | boolean | 将指定的字符串转为boolean值 |
7. 基本用法
现在我们已经知道有哪些包装类了,那么这些包装类怎么用呢?接下来我们就通过一些代码,来学习常用的包装类吧。
7.1 Integer的用法
我们先通过一段代码,来了解一下Integer的用法,因为在实际开发中,Integer是比较常用的包装类。
/** * @autho */ public class WrapperTest { public static void main(String[] args) { //Integer变量的几种定义方式 Integer i001 = new Integer(50); Integer i002=new Integer("100"); //注意:将字符串转为数值型时,也要注意待转换的类型必须匹配,我们不能将非数字的字符串转为数值型,否则会出现NumberFormatException //Integer i007=new Integer("hello"); Integer i003 = 100; //利用静态方法,返回一个指定int值的Integer对象 Integer i004=Integer.valueOf(200); //利用静态方法,返回指定String值的Integer对象 Integer i005=Integer.valueOf("300"); //第2个参数radix,表示基数,即当前采用的进制 Integer i006=Integer.valueOf("400",16); System.out.println("i006="+i006); //获取Integer的最大值与最小值 System.out.println(Integer.MAX_VALUE); System.out.println(Integer.MIN_VALUE); } }
valueOf()方法是一个静态方法,用于返回给定参数的原生Number对象,其参数可以是原生数据类型和String等。如果该方法带有两个参数,那么第一个是字符串,第二个则是基数,用于表明要转换成的进制。
7.2 Double的用法
接下来我们再来看看Double的用法。
/** * @author * */ public class WrapperTest { public static void main(String[] args) { //Double类型的用法 //将数值型或字符串类型转为Double类型 Double d001 = new Double(100.1); Double d002 = new Double("200.2"); //Double d007 = new Double("hello"); Double d003 = 300.3; Double d004 =Double.valueOf(400.4); //通过doubleValue()方法取double值 System.out.println("d004="+d004.doubleValue()); Double d005 =Double.valueOf("500.5"); //直接使用 System.out.println("d005="+d005); //获取最大值和最小值 System.out.println(Double.MAX_VALUE); System.out.println(Double.MIN_VALUE); } }
7.3 字符串转包装类
有了包装类,我们就可以将字符串类型的数值转换成Integer或者是Double等类型。在下面的案例中,我们可以利用包装类提供的各个parseXXX()方法,来将字符串转为对应的包装类型。
/** * @author * */ public class WrapperTest { public static void main(String[] args) { //字符串转Integer或Double类型 String s1 = "123"; //方式1: int i007 = Integer.parseInt(s1); System.out.println("i007="+i007); //方式2: int i008 = Integer.valueOf(s1); System.out.println("i008="+i008); String s2 = "20.5"; //方式1: double d006 = Double.parseDouble(s2); System.out.println("d006="+d006); //方式2: double d007 = Double.valueOf(s2); System.out.println("d007="+d007); //java.lang.NumberFormatException,数字格式化异常 //String s3 = "hello"; String s3 = null; System.out.println(Integer.parseInt(s3)); } }
在以上代码中,除了有Integer.parseInt()、Double.parseDouble()方法之外,还有Float.parseFloat()、Byte.parseByte()、Short.parseShort()、 Boolean.parseBoolean()
等方法可以将字符串转为对应的包装类。
但是我们要注意,在将字符串转为Integer或Double等类型时,并不是所有的字符串内容都可以转换成功,有可能会出现NumberFormatException异常,如下所示:
Exception in thread "main" java.lang.NumberFormatException: For input string: "hello"
7.4 类型间转换
Byte、Short、Integer、Long、Float、Double这六个类,有一个共同的父类Number。其中,Number提供了一组xxxValue()方法,可以用于将某种类型转换成其他的类型,案例如下:
/** * @author * */ public class WrapperTest { @SuppressWarnings("null") public static void main(String[] args) { //类型间转换 Integer a = 100; //将Integer转为Byte类型 Byte b = a.byteValue(); //将Integer转为Short类型 Short c = a.shortValue(); //将Integer转为Long类型 Long d = a.longValue(); //将Integer转为Float类型 Float e = a.floatValue(); //将Integer转为Double类型 Double f = a.doubleValue(); //取出数值的整数部分,将Integer转为int int g = a.intValue(); System.out.println("a="+a+",b="+b+",c="+c+",d="+d+",e="+e+",f="+f+",g="+g); //包装类转字符串,默认是按照10进制进行转换 String intStr = Integer.toString(1000); String dobuleStr = Double.toString(200.5); Byte by=126; String byteStr=Byte.toString(by); //将数字转换成二进制 String str1 = Integer.toBinaryString(num); // 将数字转换成八进制 String str2 = Integer.toHexString(num); // 将数字转换成十六进制 String str3 = Integer.toOctalString(num); } }
每种包装类之间,都可以使用这些方法进行类型的转换。另外每种包装类都提供了对应的toString()
或toBinaryString()/toHexString()/toOctalString()
方法,可以将该包装类转为十进制、二进制、八进制和十六进制的String字符串,比如Integer.toString()、Double.toString()
等,这里壹哥就不再一一赘述了。
三. 结语
至此,就把Java中的常用包装类给大家介绍完毕了,现在你知道包装类和基本类型有什么联系和区别了吗?本文重点总结如下:
- Java提供的包装类可以把基本类型包装为class,从而可以通过面向对象的方式操作基本类型;
- 整数和浮点数的包装类都继承自Number类;
- 包装类提供了大量的实用方法和常量。
以上就是Java的包装类特性总结的详细内容,更多关于Java 包装类的资料请关注脚本之家其它相关文章!