包装类 Wrapper
包装类 Wrapper
1、说明
1.针对八种基本数据类型相应的引用类型—包装类
2. 有了类的特点,就可以调用类中的方法。
基本数据类型 | 包装类 |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
2、关系图
IDEA显示类图: 右键->Diagrams
(1)Boolean
说明:这里的 “蓝色C” 表示 class,这里的 “绿色I” 是 interface,虚线指的是“实现”关系(实现接口);实线指的是继承关系。
(2)Character
(3) Byte 、 Short 、 Integer 、 Long 、 Float 、 Double
在Number上输入空格,就会出现其子类。
3、包装类和基本数据的转换
演示包装类和基本数据类型的相互转换,这里以int和 Integer演示。
- jdk5 前的手动装箱和拆箱方式。
装箱:基本类型 -> 包装类型
拆箱:包装类型 -> 基本类型 - jdk5 以后(含jdk5)的自动装箱和拆箱方式。
- 自动装箱底层调用的是 valueOf 方法,比如 lnteger.valueOf()。
public static void main(String[] args) {
// -------------------------jdk5之前------------------------
// 手动装箱 int -> Integer
int n1 = 100;
Integer integer_1 = new Integer(n1);
Integer integer_2 = Integer.valueOf(n1);
//手动拆箱 Integer -> int
int i = integer_1.intValue();
// -------------------------jdk5之后------------------------
// 自动装箱
int n2 = 99;
Integer integer_3 = n2; //底层使用的是Integer.valueof(n2),debug一下
// 自动拆箱
int n3 = integer_3; 底层使用的是intValue();
}
4、练习
(1)
代码是否正确?
Double d = 100d;
Float f = 1.5f;
正确,是自动装箱
自动装箱 Double.valueOf(100d),自动装箱 Float.valueOf(1.5f);
(2)
分析输出结果。
public class WrapperExercise01 {
public static void main(String[] args) {
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);
}
}
三元运算符【是一个整体】
obj1 = 1.0
obj2 = 1
5、包装类型和String类型的相互转换
(1) Wrapper -> String
以 Integer 为例
Integer i = 100;//自动装箱
//方法1
String str1 = i + "";
//方法2
String str2 = i.toString();
//方法3
String str3 = String.valueOf(i);
(2) String -> Wrapper
String str4 = "123";
//方法1
Integer i2 = Integer.parseInt(str4);
//方法2
Integer i3 = new Integer(str4);
6、Integer类和Character类的常用方法
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'));//转成小写
}
7、Integer类面试题
1
判断正误。
public static void main(String[] args) {
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);
Integer x = 128;
Integer y = 128;
System.out.println(x == y);
}
我的答案:不知道!
分析:
① 第二、三行,i 和 j 都是对象,==判断两个对象是否为同一个对象,返回false。
② 第六、七行,底层是 Integer.valueOf(1); 要阅读valueOf源码。
在-128到127之间,返回的是 IntegerCache.cache[i + (-IntegerCache.low)] ,如果传进来的值是相同且在这个范围的,就是同一个对象。返回true。
③ 第10、11行,超过128,所以是不同的对象,False。
答案为 false true false
2
判断正误
public class WrapperExercise03 {
public static void main(String[] args) {
//示例一
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2);
//示例二
Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3 == i4);
//示例三
Integer i5 = 127;//底层Integer.valueOf(127)
Integer i6 = 127;//-128~127
System.out.println(i5 == i6);
//示例四
Integer i7 = 128;
Integer i8 = 128;
System.out.println(i7 == i8);
//示例五
Integer i9 = 127; //Integer.valueOf(127)
Integer i10 = new Integer(127);
System.out.println(i9 == i10);
//示例六
Integer i11=127;
int i12=127;
System.out.println(i11==i12);
//示例七
Integer i13=128;
int i14=128;
System.out.println(i13==i14);
}
}
分析
示例一 new出来的一定不是同一个对象 F
示例二 new出来的一定不是同一个对象 F
示例三 底层是valueof且 在-128-127 T
示例四 底层是valueof且 不在-128-127 F
示例五 一个底层,一个new,还是 F
示例六 只要有基本数据类型,判断的是值是否相同 T
示例七 基本数据类型T
我的答案:
T
F
T
F
T
T
F