1. java对于8个基本类型分别定义了对应的包装类,而包装类出现的原因是为了解决基本类型不能参与面向对象开发的问题。
public static void main(String[] args) {
dosome("abc");
dosome(new Point(1,2));
int i=1;
/*
* java的8个基本类型:byte、short、int、long、float、double、char、boolean
* 是以值的形式直接存在的,所以他们并没有面向对象的特性,自然也不继承自Object.
* 所以不能使用多态,用Object的角度去接受基本类型
*/
Integer ii=new Integer(i);
dosome(ii);
}
public static void dosome(Object obj){
}
2. Number: 数字类型的包装类继承自Number,其提供了如:intValue,doubleValue这样的方法,作用是可以将当前包装类表示的数字以其他数字类型的形式返回。
/*
* 将基本类型转换为包装类有两种方式:
* 1.调用构造方法
* 2.调用静态方法valueOf(推荐)
*/
/*法一,不推荐
Integer i1=new Integer(123);
Integer i2=new Integer(123);
System.out.println(i1==i2);//false
System.out.println(i1.equals(i2));//true*/
//法二,推荐
Integer i1=Integer.valueOf(127);//数字的范围只能在-128到127之间
Integer i2=Integer.valueOf(127);
System.out.println(i1==i2);//true
System.out.println(i1.equals(i2));//true
//转回基本类型
int i=i1.intValue();
System.out.println(i1);//127
double d=i1.doubleValue();
System.out.println(d);//127.0
byte b=i1.byteValue();
System.out.println(b);//127
- 数字类型包装类都支持两个常量:MAX_VALUE,MIN_VALUE,分别保存了对应基本类型的最大值与最小值。
//获取int最大值,最小值
int imax=Integer.MAX_VALUE;
int imin=Integer.MIN_VALUE;
System.out.println("imax:"+imax);//imax:2147483647
System.out.println("imin:"+imin);//imin:-2147483648
//获取double最大值和最小值
double dmax=Double.MAX_VALUE;
double dmin=Double.MIN_VALUE;
System.out.println("dmax:"+dmax);
System.out.println("dmin:"+dmin);
4. parseXXX(String str): 包装类提供了一个静态方法parseXXX(String str),可以将给定的字符串转换为对应的基本类型,前提是该字符串必须正确的描述基本类型可以保存的值。
String str="123";
int i=Integer.parseInt(str);
System.out.println(i+1);//124
/*错误原因:该字符串必须正确的描述基本类型可以保存的值
String str="a";
int i=Integer.parseInt(str);
System.out.println(i+1);*/
/*错误原因:该字符串必须正确的描述基本类型可以保存的值
String str="123.124";
int i=Integer.parseInt(str);
System.out.println(i+1);*/
double d=Double.parseDouble(str);
System.out.println(d+1);//124.0
5. JDK1.5之后推出了一个新的特性:自动拆装箱
/*
* 自动拆装箱是编译器认可,而不是虚拟机认可。
* 编译器在将源程序编译时自动补充代码来完成基本类型与包装类之间的转换
*
* 下面触发了自动拆箱:
* 在class文件中,下面的代码被编译器改为
* int i=new Integer(1).intValue();
*/
int i=Integer.valueOf(1);//用基本类型去接收引用类型
/*
* 下面触发了自动装箱:
* 在class文件中,下面的代码被编译器改为
* Integer i1=Integer.valueOf(123);
*/
Integer i1=123;//用引用类型去接收基本类型