基本数据类型与包装类之间的转化
基本数据类型 To 包装类:调用包装类的构造方法,可以查看源码查看可以通过哪些构造方法进行转化。
Integer a = new Integer(123);
Integer b = new Integer("123");
包装类 To 基本数据类型:调用包装类的xxxValue()方法
Integer a = new Integer(12);
int b = a.intValue();
JDK 5.0新特性:自动装箱和自动拆箱
自动装箱(基本数据类型 To 包装类):直接将基本数据类型定义变量的值赋给包装类变量。
// 自动装箱
int num = 10;
Integer a = num;
boolean b = true;
Boolean b_B = b;
自动拆箱(包装类 To 基本数据类型):直接将包装类变量赋值给基本数据类型。
// 自动拆箱
Integer a= new Integer("123");
int b = a;
基本数据类型、包装类和String之间的转化
基本数据类型、包装类 To String
// 1.直接在基本数据类型后加 “ ”
int a = 10;
String str = a + "";
// 2.调用String重载方法valueOf()
float f = 1.3f;
String str2 = String.valueOf(f); // 包装类同样传入参数即可(自动装箱)
String To 基本数据类型、包装类
String str = "123";
String b = "true";
String b2 = "true1";
/* 报错
int num = (int)str;
Integer int1 = (Integer)str; // 不存在父子类关系,不能强转
*/
// 调用包装类的parseXXX方法
Integer.parseInt(str); // 123
Boolean.parseBoolean(b); // ture
Boolean.parseBoolean(b2); // false。只有标准形式“true”,不忽略大小写。其他都为false。
练习题
// 1
Object obj = true ? new Integer(1) : new Double(2.0);
System.out.println(obj) // 1.0
// 编译时 Integer 类型已经提升为 Double 类型
// 2
Object obj2;
if(true)
obj2 = new Integer(1);
else
obj2 = new Double(2.0);
System.out.println(obj2); // 1
// 3
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println( i == j ); // false
Integer m = 1;
Integer n = 1;
System.out.println( m == n ); // true。从IntegerCache从提取
Integer x = 128;
Integer y = 128;
System.out.println( x == y ); // false。超过了IntegerCache存储数值范围,则new。
/*
Integer内部定义了IntegerCache结构,IntegerCache中定义了Integer[],保存了从-128~127之间的整数。如果使用自动装箱的方式给Integer赋的值在此范围内,则Integer会直接使用数组中的元素,不会再new一个元素。
*/