Java包装类

1 什么是Java的包装类

Java的包装器类提供了将原始类型转换为对象类型的机制。

从J2SE 5.0开始,自动装箱自动拆箱功能实现了将原始类型转换为对象类型,并将对象类型自动转换为原始类型。

2 Java包装类的应用场景

Java是一种面向对象的编程语言,因此我们需要处理对象多次,例如在Collections,Serialization,Synchronization等中。让我们看一下在哪些场景需要用到包装器类:

  • 在方法中更改值: Java仅支持按值调用。因此,如果我们传递原始值,它将不会更改原始值。但是,如果我们传递的是对象,它将更改原始值。
  • 序列化:有时候我们需要将对象转换为流以执行序列化操作。这时我们可以把原始类型通过包装器类将其转换为对象。
  • 同步: Java同步适用于多线程中的对象。
  • java.util包: java.util包提供了用于处理对象的实用程序类。
  • collection集合框架: Java的collection集合框架仅适用于对象。collection集合框架的所有类(ArrayList,LinkedList,Vector,HashSet,LinkedHashSet,TreeSet,PriorityQueue,ArrayDeque等)仅仅能处理对象。

3 Java包装类有哪些

java.lang包的八个类在Java中称为包装器类。八个包装器类的列表如下:

原始类型 包装类型
boolean Boolean
char Char
byte Byte
short Short
int Integer
long Long
float Float
double Double

4 Java自动封箱

将原始数据类型自动转换为其对应的包装器类称为自动装箱,例如,byte到Byte,char到Char,int到Integer,long到Long,float到Float,boolean到Boolean,double到Double和short到Short。

从Java 5开始,我们不需要使用包装器类的valueOf() 方法将原始数据类型转换为对象。

4.1 Java自动封装的例子

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
//将原始类型转换为对象类型
//自动封装的例子:将int转换为Integer
public class Demo{
    public static void main(String args[]){
        //int转换为Integer
        int a=20;
        Integer i=Integer.valueOf(a);//手动转换,将int显式转换为Integer
        Integer j=a;//自动装箱,编译器将在内部调用Integer.valueOf()

        System.out.println(a+" "+i+" "+j);
    }
}

输出结果为:

20 20 20

5 Java自动拆箱

将包装类型自动转换为其对应的原始类型的操作称为自动拆箱。这是自动装箱的逆向过程。从Java 5开始,我们不需要使用包装器类的intValue() 方法将包装器类型转换为原始类型。

5.1 Java自动拆箱的例子

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
//将对象类型转换为其对于的原始类型
//自动拆箱:将Integer转换为int
public class Demo{
    public static void main(String args[]){
        //将Integer转换为int
        Integer a=new Integer(3);
        int i=a.intValue();//手动转换,将Integer明确转换为int
        int j=a;//自动拆箱,编译器将在内部调用a.intValue()

        System.out.println(a+" "+i+" "+j);
    }}

输出结果为:

3 3 3

6 Java包装类的例子

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
// 将所有原始类型转换为其对应的包装对象,反之亦然
public class Demo{
    public static void main(String args[]){
        byte b=10;
        short s=20;
        int i=30;
        long l=40;
        float f=50.0F;
        double d=60.0D;
        char c='a';
        boolean b2=true;

        //自动装箱:将原始类型转换为对象类型
        Byte byteobj=b;
        Short shortobj=s;
        Integer intobj=i;
        Long longobj=l;
        Float floatobj=f;
        Double doubleobj=d;
        Character charobj=c;
        Boolean boolobj=b2;

        //输出对象信息
        System.out.println("---Printing object values---");
        System.out.println("Byte object: "+byteobj);
        System.out.println("Short object: "+shortobj);
        System.out.println("Integer object: "+intobj);
        System.out.println("Long object: "+longobj);
        System.out.println("Float object: "+floatobj);
        System.out.println("Double object: "+doubleobj);
        System.out.println("Character object: "+charobj);
        System.out.println("Boolean object: "+boolobj);

        //自动拆箱:将对象类型转换为对应的原始类型
        byte bytevalue=byteobj;
        short shortvalue=shortobj;
        int intvalue=intobj;
        long longvalue=longobj;
        float floatvalue=floatobj;
        double doublevalue=doubleobj;
        char charvalue=charobj;
        boolean boolvalue=boolobj;

        //输出对象信息
        System.out.println("---Printing primitive values---");
        System.out.println("byte value: "+bytevalue);
        System.out.println("short value: "+shortvalue);
        System.out.println("int value: "+intvalue);
        System.out.println("long value: "+longvalue);
        System.out.println("float value: "+floatvalue);
        System.out.println("double value: "+doublevalue);
        System.out.println("char value: "+charvalue);
        System.out.println("boolean value: "+boolvalue);
    }
}

输出结果为:

---Printing object values---
Byte object: 10
Short object: 20
Integer object: 30
Long object: 40
Float object: 50.0
Double object: 60.0
Character object: a
Boolean object: true
---Printing primitive values---
byte value: 10
short value: 20
int value: 30
long value: 40
float value: 50.0
double value: 60.0
char value: a
boolean value: true

7 Java自定义包装类

Java包装器类包装原始数据类型,这就是为什么它被称为包装器类的原因。我们也可以创建一个包装原始数据类型的类。这叫做创建自定义包装类

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
//创建自定义包装类
class Yiidian{
    private int i;
    Yiidian(){}
    Yiidian(int i){
        this.i=i;
    }
    public int getValue(){
        return i;
    }
    public void setValue(int i){
        this.i=i;
    }
    @Override
    public String toString() {
        return Integer.toString(i);
    }
}
//测试自定义包装类
public class Demo{
    public static void main(String[] args){
        Yiidian j=new Yiidian(10);
        System.out.println(j);
    }
}

输出结果为:

10

 

一点教程,一个分享编程知识的公众号。跟着站长一起学习和进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「一点教程」,你已然超越了90%的程序员!

一点教程二维码