目录
一、包装类的基本信息
二、结构图
三、包装类和基本数据的转换
基本说明
package com.hspedu.wrapper;
/**
* @author GQQ
* @version 1.0
*/
public class Integer01 {
public static void main(String[] args) {
//int <-> Integer 装箱和拆箱
//jdk5以前是手动装箱和拆箱
//手动装箱
int n1 = 10;
Integer integer = new Integer(n1);
Integer integer1 = Integer.valueOf(n1);
//手动拆箱
int i = integer.intValue();
//jdk5以后是自动装箱和拆箱
int n2 = 20;
Integer integer2 = n2;//自动装箱:底层使用的是 Integer.valueOf(n2)
int n3 = integer2;//拆箱: 底层调用的是integer2.intValue();
//其他包装类的装箱和拆箱用法类似
}
}
练习
package com.hspedu.wrapper;
/**
* @author GQQ
* @version 1.0
*/
public class WrapperExercise01 {
public static void main(String[] args) {
Double d = 100d;//自动装箱 Double valueOf(double d)
Float f = 1.5f;//自动装箱 Float valueOf(float f)
double d1 = d;//自动拆箱 doubleValue()
float f1 = f;//floatValue()
//考察知识点:三元运算符是一个整体,因为表达式2的数据类型是Double,所以输出的obj1 = 1.0s
Object obj1 = true?new Integer(1):new Double(2.0);
System.out.println(obj1);
Object obj2;
if(true) {
obj2 = new Integer(1);
} else {
obj2 = new Double(2.0);
}
System.out.println(obj2);
System.out.println(obj1 == obj2);
}
}
四、包装类型和 String 类型的相互转换
package com.hspedu.wrapper;
/**
* @author GQQ
* @version 1.0
*/
public class WrapperVsString {
public static void main(String[] args) {
//包装类(Integer)-> String
Integer i = 100;//自动装箱
//方式1
//1.i本身并没有变化
//2.以i为基本数据转成的String对象
String str1 = i + "";
//方式2
String str2 = i.toString();
//方式3
String str3 = String.valueOf(i);
//String -> 包装类(Integer)
String str4 = "1234";
Integer i2 = Integer.parseInt(str4);//先转成int型数据,然后自动装箱
Integer i3 = new Integer(str4);//通过构造器直接传进去
System.out.println("ok");
}
}
五、Integer 类和 Character 类的常用方法
package com.hspedu.wrapper;
/**
* @author GQQ
* @version 1.0
*/
public class WrapperMethod {
public static void main(String[] args) {
System.out.println(Integer.MIN_VALUE); //返回最小值
System.out.println(Integer.MAX_VALUE);//返回最大值
System.out.println(Character.isDigit('a'));//判断是不是数字
System.out.println(Character.isLetter('a'));//判断是不是字母
System.out.println(Character.isUpperCase('a'));//判断是不是大写
System.out.println(Character.isLowerCase('a'));//判断是不是小写
System.out.println(Character.isWhitespace('a'));//判断是不是空格
System.out.println(Character.toUpperCase('a'));//转成大写
System.out.println(Character.toLowerCase('A'));//转成小写
}
}
六、练习
package com.hspedu.wrapper;
/**
* @author GQQ
* @version 1.0
*/
public class WrapperExercise02 {
public static void main(String[] args) {
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i==j);//引用数据类型,判断是两个Integer类对象的地址的值是否相等,false
/*
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
代码解读:
jvm在运行时创建了一个缓存区域,并创建IntegerCache.cache[],
所以如果传入的i的范围是在-128~127之间,就直接从该数组中获取Integer对象
否则new Integer(i)
*/
//自动装箱 底层调用的是 Integer valueOf(int i),
Integer m =1;//1在-128~127之间
Integer n = 1;
System.out.println(m==n);//内存地址相同,结果为T
Integer x = 128;//128不在在-128~127之间,需要new Integer(128)
Integer y = 128;
System.out.println(x==y);//比较的是对象的地址的值是否相等,false
}
}
package com.hspedu.wrapper;
/**
* @author GQQ
* @version 1.0
*/
public class WrapperExercise03 {
public static void main(String[] args) {
//示例一
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2);//比较的是引用数据,F
//示例二
Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3 == i4);//同上,F
//示例三
Integer i5 = 127;//底层 Integer.valueOf(127)
Integer i6 = 127;//-128~127
System.out.println(i5 == i6); //从缓存数组中获取的对象,没有创建新的Integer对象,T
//示例四
Integer i7 = 128;
Integer i8 = 128;
System.out.println(i7 == i8);//超出了-128-127的范围,创建对象,F
//示例五
Integer i9 = 127; //Integer.valueOf(127),从缓存的数组中获取的Integer对象
Integer i10 = new Integer(127);
System.out.println(i9 == i10);//两者指向的内存地址不同,F
//示例六
//只要有基本数据类型, 判断的就是值是否相同
//i11会自动拆箱,转换成int型数据
Integer i11=127;//从缓存数组中获取127
int i12=127;
System.out.println(i11==i12); //T
//示例七
Integer i13=128;
int i14=128;
System.out.println(i13==i14);//T
}
}