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