8种基本数据类型对应包装类如下
byte -----------------------------------------------> java.lang.Byte (父类Number)
short ----------------------------------------------> java.lang.Short(父类Number)
int -------------------------------------------------> java.lang.Integer(父类Number)
long -----------------------------------------------> java.lang.Long(父类Number)
float -----------------------------------------------> java.lang.Float(父类Number)
double -------------------------------------------> java.lang.Double(父类Number)
boolean -----------------------------------------> java.lang.Boolean(父类Object)
char ----------------------------------------------> java.lang.Character(父类Object)
以Integer 包装类为例
此方法已经过时了,下边只是记录了解!
Integer继承自Number抽象类,Number抽象类中有一些方法,来看下:
public class Ints {
public static void main(String[] args) {
// 123基本数据类型,进行构造方法的包装达到的效果:基本数据类型向引用数据类型的转化。
// 将基本数据类型 (转化为)引用类型 -> 【装箱】
Integer num = new Integer(123);
// 将基本数据类型 (转化为) 引用数据了类型 -> 【拆箱】
// 以下2种方法都是负责拆箱的
float f = num.floatValue();
System.out.println(f); // 123.0
int i = num.intValue();
System.out.println(i); // 123
}
}
jdk1.5支持自动装箱、拆箱
自动装箱:基本数据类型转化为包装类。
自动拆箱:包装类自动转化为基本数据类型。
好处:为了方便编程。
例一:
有了自动拆箱之后,Number类的方法用不着了。
public class Ints {
public static void main(String[] args) {
// 基本数据类型,自动转化为包装类型 -> 自动装箱
Integer x = 123;
// 包装类型,自动转化为基本数据类型 -> 自动拆箱
int y = x;
System.out.println(x.toString()); // 123
System.out.println(y); // 基本数据类型,没有toSring() 方法
}
}
例二:
public class Ints {
public static void main(String[] args) {
Integer x = 123;
// 运行时,会自动拆箱,把x对象转化为基本数据类型,在进行加法运算
System.out.println(x+1);
}
}
例三:重要面试题
下边这个题,考察两个点:
(1)java中为了提高程序的执行效率,将-128~127之间所有的数(包装对象)都在方法区的整数型常量池中,目的只要用到这个区间的数据,就不需要new了,所以-128~127之间的整数内存地址不变。
(2)自动装箱 - 基本类型转化为包装类。
public class Ints {
public static void main(String[] args) {
// java中-128~127以内的数都在常量池中,所以-128~127以内的数内存地址不变
Integer x = 128;
Integer y = 128;
Integer x1 = 127;
Integer y1 = 127;
System.out.println(x == y); // false
System.out.println(x1 == y1); // true
}
}
源码分析:
Integer类加载的时候,会初始化整数型常量池:256个对象。执行 Integer a = 128 相当于执行: Integer a = Integer.valueOf(128),下边源码中,会自动判断值范围是否在 -128~127之间,如在在此范围内,会直接返回整数型常量池中的数;如果不在此范围内,则直接new Integer(i),创建新地址。
静态方法
1、Integer.parsInt
把字符串转化为数字,只有整数型的字符串数字才能被转,否则报错:
对应源码中的错误类型:
2、Float.parseFloat( )
把字符串整数或字符串浮点转化为浮点型
System.out.println(Float.parseFloat("123")); // 123.0