1.1 包装类概述
1.1.1 包装类概述
· 在进行类型转换的范畴内,有一种特殊的转换,需要将int这样的基本数据类型转换为对象;
· 所有基本类型都有一个与之对应的类,即包装类(wrapper)。
包装类概述(续1)
· 包装类是不可变类,在构造了包装类对象后,不允许更改包装在其中的值;
· 包装类是final的,不能定义他们的子类。
基本类型 | 基本类型 | 父类 |
int | java.lang.Integer | java.lang.Number |
long | java.lang.Long | java.lang.Number |
double | java.lang.Double | java.lang.Number |
short | java.lang.Short | java.lang.Number |
float | java.lang.Float | java.lang.Number |
byte | java.lang.Byte | java.lang.Number |
char | java.lang.Character | java.lang.Object |
boolean | java.lang.Boolean | java.lang.Object |
1.2 8种基本数据类型包装类
1.2.1 Number及其主要方法
· 抽象类Number是Byte、Double、Float、Integer、Long和Short类的父类;
· Number的子类必须提供将表示的数值转换为byte,double,float,int,long和short的方法;
- doubleValue() 以double形式返回指定的数值
- intValue() 以int形式返回指定的数值
- floatValue() 以float形式返回指定的数值
Number及其主要方法(续1)
/** 测试Number的intValue方法和doubleValue方法 */
public void testIntValueAndDoubleValue(){
Number d=123.45;
Number n=123;
//输出d和n对象所属的类型
System.out.println(d.getClass().getName());//java.lang.Double
System.out.println(n.getClass().getName());//java.lang.Integer
int intValue=d.intValue();
double doubleValue=d.doubleValue();
System.out.println(intValue+","+doubleValue);//123,123.45
intValue=n.intValue();
doubleValue=n.doubleValue();
System.out.println(intValue+","+doubleValue);//123,123.0
}
1.2.2 Integer常用功能
· 该类提供了多个方法,能在int类型和String类型之间互相转换,还提供一些常量例如:
- static int MAX_VALUE 值为231 -1的常量,表示int类型能表示的最大值
- static int MIN_VALUE 值为-231的常量,表示int类型能表示的最小值
Integer常用功能(续1)
· Integer的静态方法parseInt用于将字符串转换为int。
/** String转换为int */
public void testParseInt(){
String str="123";
int value=Integer.parseInt(str);
System.out.println(value);//123
str="水电费";
//会抛出NumberFormatException
//value=Integer.parseInt(str);
}
如果字符串的格式不是整数形式,将无法转换。
1.2.3 Double常用功能
· 在Double类的对象中包装一个基本类型double的值
· 构造方法
- Double(double value)
- Double(String s)
· 方法
- double doubleValue()返回此Double对象的double值
- static double parseDouble(String s)返回一个新的double值,该值被初始化为用指定的String表示的值
Double常用功能(续1)
/** String转换为double */
public void testParseDouble(){
String str="12345.00";
double value=Double.parseDouble(str);
//12345.0
System.out.println(value);
str="¥12345.00";
//会抛出NumberFormatException
//value=Double.parseDouble(str);
}
1.2.4 自动装箱和拆箱操作
· 从Java5.0版本以后加入到了autoboxing功能
· 自动"拆箱"和"装箱"是依靠JDK5的编译器在编译期的"预处理"工作
· 下落代码写法均为正确形式:
Integer a=100; //装箱
Integer b=200; //装箱
Integer c=a+b; //拆箱再装箱
double d=c; //拆箱
自动装箱和拆箱操作(续1)
· 装箱和拆箱是"编译器"认可的,而不是虚拟机。编译器在生成类的字节码时插入必要的方法调用
- Integer a=100 => Integer a=Integer.valueOf(100)
- Integer b=200 => Integer b=Integer.valueOf(200)
- Integer c=a+b=>Integer c=Integer.valueOf(a.intValue()+b.intValue())
-int d=c =>int d=c.intValue()
自动装箱和拆箱操作(续2)