日期类
包装类Wrapper
此系列笔记来源于
BiliBili韩顺平老师的Java基础课
八种基本数据类型分别对应一种包装类,可以调用类的方法
 
装箱 and 拆箱
jdk5前是手动装箱和拆箱:
//int 和 Integer 的装箱和拆箱
int n = 100;
//手动装箱(两种)
Integer integer1 = new Integer(n);
Integer integer1 = Integer.valueOf(n);
//手动拆箱
int n = integer1.intValue();
jdk5后是自动装箱和自动拆箱:
//自动装箱
int n = 200;
Integer integer1 = n; //底层用的是Integer.valueOf(n),本质未变
//自己拆箱
int n = integer1; //底层仍然使用的是 intValue()方法
其他包装类用法类似。
练习(经典面试题):
Object obj1 = true ? new Integer(1) : new Double(2.0);
//输出obj1, 输出1.0
Object obj2;
if (true) {
    obj2 = new Integer(1);
} else {
    obj = new Double(2.0);
}
//输出obj2, 输出1
//三目运算符是一个整体, 后面的 Double 会提升精度
包装类方法
包装类型和 String类型的互相转换
(以Integer为例)
Integer 转 String
Integer n = 1;
//方式1 
String s = n + "";
//方式2
String s = n.toString();
//方式3
String s = String.valueOf(n);
String 转 Integer
String s = "wuhu";
//方式1
Integer n = Integer.parseInt(s); //使用到了自动装箱
//方式2
Integer n = new Integer(s)
Integer类和 Character类的常用方法
Integer创建机制
//Integer valueOf(int i) 的源码
@IntrinsicCandidate
    public static Integer valueOf(int i) {
        //范围为[-128, 127]
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            //实际未创建新对象
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i); //创建了新对象
    }
因此
Integer n = x; //本质上是valueOf
Integer m = x;
此时如果x在[-128, 127]内,则n 和 m是同一个对象,否则不是


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号