1.八大Wrapper类
2.装箱和拆箱
JDK5之前,需要手动进行装箱拆箱。JDK5之后,自动进行装箱拆箱🎁
实例:
// 装箱和拆箱,JDK5之后,自动进行装箱拆箱 int n = 521; // 自动装箱 // 底层使用的是Integer.valueOf的方式 Integer integer = n; System.out.println(integer); // 521 // 自动拆箱 // 底层依然是使用的intValue方法 int m = integer; System.out.println(m); // 521
经典面试题:以下代码会输出什么信息?
要注意三元运算符是一个整体,所以以最高精度的Double输出结果,为1.0
3.包装类方法
String和包装类的互转
直接上代码:
// 包装类 --> String Integer i = 1314; // 方式1 String s = i + ""; System.out.println(s); // 方式2 String s2 = i.toString(); System.out.println(s2); // 方式3 String s3 = String.valueOf(i); System.out.println(s3); // String --> 包装类 String ss = "5211314"; Integer j = Integer.parseInt(ss); System.out.println(j);
包装类常用方法
// 一些常用方法 System.out.println(Integer.MAX_VALUE); System.out.println(Integer.MIN_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')); // 判断是否为小写
现用现查即可🎈
经典面试题:(如下代码输出什么结果,Integer
创建机制面试题)
第一个输出:(i == j)输出为False,因为i和j是两个不同的对象
第二个输出:(m == n)赋值底层使用的是Integer.valueOf的方式
我们来看一下Integer.valueOf的源码,该源码接受一个整形数据i,判断i是否在某一个范围内,在的话就在cache中返回数据,不在的话就新建一个Integer对象返回
@IntrinsicCandidate public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
对于i所处的范围,上面的注解有详细的说明:
This method will always cache values in the range -128 to 127
java会事先创建好一个cache数组,用来缓存-128 - 127的数据,以提升访问效率👍
所以我们不难得出一个结论,当传入的数据范围在-128 to 127,则通过cache进行返回,否则将会new一个新的对象,故第二个输出为False
第三个输出:(x == y),通过以上,不难看出,输出为True