Java的包装类特性总结

 更新时间:2023年05月31日 11:25:20   作者:一一哥Sun  
这篇文章主要介绍Java的包装类的一些特性,包装类的作用,哪些类属于包装类等,文中有详细的代码示例,对我们的学习或工作有一定的帮助,需要的朋友可以参考下

一. 包装类

1. 概念

我们知道,Java中的数据类型总体上分为基本数据类型和引用数据类型。引用类型的数据可以通过对象操作的形式进行使用,也就是说,我们可以通过对象的属性和方法来进行操作。但如果是基本数据类型的数据,我们能不能像操作对象那样来操作呢?为了实现这个目标,Java为8种基本数据类型分别设计了对应的类,我们称其为包装类(Wrapper Classes ) ,或者称其为外覆类或数据类型类。因为这些包装类都是引用类型,所以我们就可以方便地操作这些数据的属性和方法了。

其实之所以为8种基本数据类型都设计出对应的包装类,从深层分析,主要是为了配合Java 5之后出现的泛型。 在泛型的使用中,基本数据类型和泛型不能配合使用,即Primitive Types 和Generic不能混用。举个简单的例子,比如我们想使用ArrayList、HashMap等集合时,这些集合都需要指明集合中数据的泛型。而int、double等基本类型是不允许被使用的,因为这些集合容器的泛型都必须是Object类型,所以就需要这些包装类型了,如下图所示:

2. 8个包装类

有了这8个包装类,我们就可以按照面向对象的思维来操作数据了,可以操作对象的属性和方法,也可以给对象赋null值,这是基本类型做不到的。我们来看看Java中的基本类型与其对应的包装类,如下表所示:

基本类型包装类型
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

 

从上面的表中我们可以看出,基本上包装类的类名,就是把基本类型的首字母变成大写,除了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类型
toStringOString将 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 包装类的资料请关注脚本之家其它相关文章!

相关文章

  • selenium + ChromeDriver安装及使用方法

    selenium + ChromeDriver安装及使用方法

    这篇文章主要介绍了selenium + ChromeDriver安装及使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • CorsFilter 过滤器解决跨域的处理

    CorsFilter 过滤器解决跨域的处理

    这篇文章主要介绍了CorsFilter 过滤器解决跨域的处理操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java RMI机制讲解

    Java RMI机制讲解

    这篇文章主要介绍了Java RMI机制讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Java单链表基本操作的实现

    Java单链表基本操作的实现

    链表是一种数据结构,和数组同级。接下来通过本文给大家介绍Java单链表基本操作的实现,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
    2016-07-07
  • Java工厂模式的深入了解

    Java工厂模式的深入了解

    这篇文章主要为大家介绍了Java工厂模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • SpringBoot实现海量数据高效实时搜索功能

    SpringBoot实现海量数据高效实时搜索功能

    我们都知道随着业务系统的发展和使用,数据库存储的业务数据量会越来越大,逐渐成为了业务系统的瓶颈,本文给大家介绍了Spring Boot业务系统如何实现海量数据高效实时搜索,文中有详细的代码示例,需要的朋友可以参考下
    2023-10-10
  • 详解Java线程池的使用(7种创建方法)

    详解Java线程池的使用(7种创建方法)

    这篇文章主要介绍了详解Java线程池的使用(7种创建方法),线程池的创建⽅式总共包含7种,其中6种是通过Executors创建的,1种是通过ThreadPoolExecutor创建的,今天我们就来详细说一下
    2023-03-03
  • IDEA报错:无效的源发行版解决方案

    IDEA报错:无效的源发行版解决方案

    很多小伙伴在刷新maven的时候总会报 Error:java:无效的源发行版,下面这篇文章主要给大家介绍了关于IDEA报错:无效的源发行版的解决方案,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • Java 读写Properties配置文件详解

    Java 读写Properties配置文件详解

    这篇文章主要介绍了Java 读写Properties配置文件详解的相关资料,这里举例说明该如何实现,具有参考价值,需要的朋友可以参考下
    2016-11-11
  • springboot vue项目管理前后端实现编辑功能

    springboot vue项目管理前后端实现编辑功能

    这篇文章主要为大家介绍了springboot vue项目管理前后端实现编辑功能,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论