韩顺平Java25——包装类01(Interger)

包装类(Warpper)

 

 除了Boolean和Character其他六个包装类都是继承的Number

 

 

  •  包装类和基本数据类型的转换(以int为例,其他类型以此类推)

 

 

//        手动装箱 int -> Interger
        int n1 = 100;
        Integer integer = new Integer(n1);
        Integer integer1=Integer.valueOf(n1);

//        手动拆箱  Interger-> int
        int n2 = integer.intValue();

 

 

 

  public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
最底层还是new了一个
  • 练习

 

 三元运算符要看成是一个整体,Double提升了整体的精度,所以结果是1.0而不是1。

 

 if和else分别计算,所以输出1

 

  • 包装类和String类型的相互转换

1.包装类 - > String

(1)

 

 这里i并没有变化,只是将一个新的字符串赋值给了str1

(2)

 

(3)

 

 

2. String - > 包装类

(1)

 

 

 因为 Integer.parseInt(str4) 返回的是int类型所以使用了自动装箱

(2)

 

 

  • 常用方法

  • 查看类图

 

Interger经典面试题

1.

 

 

 这里第一组是new了两个Interger对象,==比较的是对象的地址,所以是false

第二组使用了Java的自动装箱,底层使用的是valueOf(),这里我们看一下valueOf()的源码

/*This method will always cache values in the range - 128 to 127,
         *inclusive, and may cache other values outside of thisrange.
         */

        public static Integer valueOf ( int i){
            if (i >= IntegerCache.low && i <= IntegerCache.high)
                return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i); 
      }

 

static final Integer cache[];

这个是一个256个数的数组,在这个范围内的时候是通过数组赋值的所以是相等的。

可以看到当传入的int的范围在-128~127之间的时候是直接返回数值的不在这个范围的才new新的Interger对象

第二组传入的是1,所以是true,第三组传入的是128,超出了范围,走的是new Integer(i),所以是false。

 

2.

 

 注意示例六和七,在比较的时候只要有基本数据类型==判断的就是值是否相等。

posted @ 2021-12-26 20:41  紫英626  阅读(76)  评论(0编辑  收藏  举报

紫英