一. 概念
为了方便操作基本数据类型值,将其封装成对象,在对象中定义了属性和行为。
用于描述该对象的类就称为基本数据类型对象包装类。
基本数据类型 | 基本数据类型对象包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
boolean | Boolean |
float | Float |
double | Double |
char | Character |
二. 常见作用
用于基本数据类型和字符串类型之间做转换
1. 基本数据类型转成字符串
//方法1
基本数据类型值+字符串;
//方法2:用toString方法
static 基本数据类型对象包装类.toString(基本数据类型值);
例子:
class IntegerDemo{
public static void main(String[] args){
Integer i=2;
//1. 基本数据类型值+字符串
System.out.println(i+"ab");
//2.基本数据类型对象包装类.toString(基本数据类型值)
System.out.println(Integer.toString(34));
}
}
运行结果是:
2. 字符串转成基本数据类型
//方法1:静态方法,可以直接由基本数据类型对象包装类调用
static 基本数据类型 a=基本数据类型对象包装类.parse基本数据类型对象包装类(字符串);
//方法2:非静态方法,要用对象调用
基本数据类型对象包装类 i=new 基本数据类型对象包装类(字符串);
基本数据类型 a=i.基本数据类型Value();
例子1:
class IntegerDemo{
public static void main(String[] args){
int a=Integer.parseInt("123");
System.out.println(a+4);
double b=Double.parseDouble("12.23");
System.out.println(b+4);
boolean c=Boolean.parseBoolean("true");
System.out.println(c);
}
}
运行结果是:
例子2:
class IntegerDemo{
public static void main(String[] args){
/*
int a=Integer.parseInt("123");
System.out.println(a+4);
*/
Integer a=new Integer("123");
System.out.println(a.intValue()+4);
/*
double b=Double.parseDouble("12.23");
System.out.println(b+4);
*/
Double b=new Double("12.23");
System.out.println(b.doubleValue()+4);
/*
boolean c=Boolean.parseBoolean("true");
System.out.println(c);
*/
Boolean d=new Boolean("true");
System.out.println(d.booleanValue());
}
}
运行结果是:
3. 十进制转成其他进制
String Integer.toBinaryString(整型值);//返回整型值的二进制字符串
String Integer.toHexString(整型值);//返回整型值的十六进制字符串
String Integer.toOctalString(整型值);//返回整型值的八进制字符串
例子:
class IntegerDemo{
public static void main(String[] args){
//转成二进制字符串
System.out.println(Integer.toBinaryString(6));
System.out.println(Integer.toBinaryString(-6));
//转成十六进制字符串
System.out.println(Integer.toHexString(60));
//转成八进制字符串
System.out.println(Integer.toOctalString(60));
}
}
运行结果:
4. 其他进制转成十进制
int i=Integer.parseInt(String,radix);//radix表示进制数
例子:
class IntegerDemo{
public static void main(String[] args){
int x=Integer.parseInt("110",2);
System.out.println(x);
int y=Integer.parseInt("110",8);
System.out.println(y);
int z=Integer.parseInt("110",10);
System.out.println(z);
int m=Integer.parseInt("110",16);
System.out.println(m);
}
}
运行结果是:
三. 新特性
1. 自动装箱和自动拆箱
JDK1.5版本以后出现的新特性,方便了基本数据类型和其对应的包装类型之间的转换。
自动装箱:将一个基本数据类型的值赋给其对应的包装类型
自动拆箱:将一个包装类类型的值赋给其对应的基本数据类型
例子:
class IntegerDemo
{
public static void main(String[] args)
{
Integer x=4; //Integer x=new Integer(4),自动装箱 4=new Integer(4);
x=x+4; //x+4:x进行了自动拆箱变成了int类型,和4进行加法运算,再将和进行自动装箱赋给x
System.out.println(x);
}
}
运行结果是:
2. 包装类数据缓存
Java对部分基本数据类型对应的包装类的部分数据进行了缓存,当再次使用等值对象时直接从缓存中获取,不会重新创建新的对象,可提高程序的执行性能。
- byte/short/int/long对应的包装类Byte/Short/Integer/Long:数据缓存范围是-128~127,包含-128和127
- float/double对应的包装类Float/Double:没有数据缓存范围
- char对应的包装类Character:数据缓存范围是0~127,包含0和127
- boolean对应的包装类Boolean:数据缓存范围是true和false
例子:
class IntegerDemo {
public static void main(String[] args) {
//1. 整型包装类数据缓存范围:-128~127
Integer i1 = -128;
Integer i2 = -128;
System.out.println(i1 == i2);//输出true
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3 == i4);//输出false
//2. 浮点型包装类没有数据缓存范围
Double d1 = 1.0;
Double d2 = 1.0;
System.out.println(d1 == d2);//输出false
//3. 字符型包装类数据缓存范围:0~127
Character c1 = 127;
Character c2 = 127;
System.out.println(c1 == c2);//输出true
//4. 布尔型包装类数据缓存范围:true和false
Boolean b1 = true;
Boolean b2 = true;
System.out.println(b1 == b2);//输出true
}
}
运行结果是: