1 包装类
Java为每个基本类型都提供了一个对应的包装类
基本类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
2 为什么用包装类
为了编程方便提供的包装类
/**
* 使编程更加方便
*/
public class Test01 {
public static void main(String[] args) {
m1("asdf");
m1( 456 );
/*
* m1()方法的形参是Object类型的引用,调用方法时,只能obj形参传递一个引用,
* 不能直接传递基本类型数据
* 在这儿调用m1( 456 ); 系统没有错误,
* 是因为系统自动把整数 456 转换为对应的包装类对象, 再把包装类对象传递给形参obj
*/
}
//定义一个方法,可以接收任意类型的数据
public static void m1( Object obj ) {
}
}
3 包装类的继承结构
4 创建包装类对象
1、所有的包装类都可以根据基本类型创建包装类对象
2、除了Character外, 其他的包装类都可以根据字符串创建包装类对象
/**
* 创建包装类对象
*/
public class Test02 {
public static void main(String[] args) {
//1) 都可以根据基本类型创建包装类对象
Boolean b1 = new Boolean(true);
Character c1 = new Character('A');
Integer i1 = new Integer(123);
Double d1 = new Double(3.14);
//2) 除了Character外,都可以根据字符串创建包装类对象
Integer i2 = new Integer("789");
Double d2 = new Double("78.456");
//注意, 字符串格式要符合对应的数字格式
// i2 = new Integer("abc"); //java.lang.NumberFormatException
d2 = new Double("213e+2"); //科学计数法
System.out.println( d2 );
// d2 = new Double("2323dsafaf"); //java.lang.NumberFormatException
Boolean b2 = new Boolean("true");
System.out.println( b2 );
//Boolean可以把非"true"的字符串都转换为false
b2 = new Boolean("asdfasfdasfasfasfda");
System.out.println( b2 ); //false
}
21300.0
true
false
Process finished with exit code 0
5 包装类的基本操作
/**
* 包装类的基本操作
* 以Integer类为例
*/
public class Test03 {
public static void main(String[] args) {
Integer i1 = new Integer(123);
//1)从Number继承的方法, byteValue(), shortValue(), intValue(), floatValue(), doubleValue()
byte bb = i1.byteValue();
double dd = i1.doubleValue();
//2) 包装类都实现了Comparable接口,重写comapareTo()方法,可以比较两个包装类对象的大小
//在包装类中都有一个value字段保存对应基本类型的数据, 在比较大小时,根据value字段大小比较
Integer i2 = new Integer("789");
System.out.println( i1.compareTo(i2)); //-1
//3) 重写equals()方法, 根据value字段的值判断
System.out.println( i1.equals(i2) ); //false
//4)包装类有parseXXX( text ) 可以把字符串转换为基本类型数据
int num = Integer.parseInt("369");
double dd2 = Double.parseDouble("3.14");
//注意, 参数字符串要符合数字格式
// num = Integer.parseInt("3.14"); // java.lang.NumberFormatException
//5)重写了toString()方法
String text = i1.toString();
//6) valueOf() 可以把基本类型/String字符串转换为包装类对象
Integer i3 = Integer.valueOf(147);
i3 = Integer.valueOf("258");
}
}
-1
false
Process finished with exit code 0
6 拆箱和装箱
装箱:把基本类型转换为包装类对象
拆箱:把包装类对象转换为基本类型
在Java中, 装箱与拆箱可以自动进行
public class Test04 {
public static void main(String[] args) {
Integer i1 = 123; //装箱
int num = i1; //自动拆箱
Integer i2 = 456; //根据基本类型数据456创建一个包装类对象, 把该对象的引用赋值给i2
Integer i3 = 456; //创建了一个新包装类对象
System.out.println( i2.equals(i3)); //true
System.out.println( i2 == i3 ); //false
i2 = 123; //自动装箱
i3 = 123;
System.out.println( i2 == i3 ); //true
/*
* Java认为-128 ~ 127 之间的整数是使用最频繁的, 所以该范围的整数装箱后的包装类对象存储在共享池中
* 在执行 i2 = 123时, 根据123创建Integer对象,存储 在共享池中
* 执行 i3 = 123时, 直接把共享池中的包装类对象的引用返回赋值给i3
*/
Long gg1 = 66L;
Long gg2 = 66L;
System.out.println( gg1 == gg2 ); //true
}
}
true
false
true
true
Process finished with exit code 0
7 int/ Integer/String之间的相互转换
/**
* 编写程序,实现int/ Integer/String之间的相互转换
*/
public class Test04 {
public static void main(String[] args) {
//1)int->String
int num = 456;
String text = "" + num ;
text = String.valueOf(num);
text = Integer.toString(num);
//2) Integer -->String
Integer i1 = new Integer(789);
text = i1.toString();
//3) int -->Integer
i1 = num; //自动装箱
i1 = Integer.valueOf(num);
//4) String -->Integet
i1 = Integer.valueOf(text);
//5)Integer-->int
num = i1 ; //自动拆箱
num = i1.intValue();
//6) String -->int
num = Integer.parseInt(text);
}
}