咱们对这个Integer封装类并不陌生,就连初学者都了解 ,下面咱们就解剖一下这个神奇的老哥
JDK源码 (在java.lang包下面)首先这老哥继承一个Number 类 ,这个类的总体作用就是对数字的处理, 这个实现了Serializable(序列化接口),内置抽象方法(intValue,longValue,floatValue,doubleValue)以及byteValue,shortValue方法。
其次实现比较接口 Comparable ,其泛型是老哥,此接口对实现它的每个类的对象强加一个整体排序。 这个排序被称为类的自然排序 ,类的compareTo方法被称为其自然比较方法,相当于java的Arrays.sort方法,同时
不需要指定一个comparator 有兴趣可以看一下此接口和comparator 的区别,老哥就有了自己和自己本身类型比较能力。
老哥是个final类 不能被继承,所以你见过老哥的儿子和孙子吗?
肯定会有些大兄弟看到这玩意会懵逼的 其实这两个玩意就是2个补码,不要那么紧张
这里的话 我就不解释了 给大兄弟们一个链接(因为我懒的看 )https://blog.csdn.net/u011531425/article/details/80712160
最后得出来 的结论 MIN_VALUE = -231-1 MAX_VALUE = 231-1 这是老哥的范围
Class.getPrimitiveClass("int") 为指定的对象返回虚拟机的类对象 实现 :static native Class getPrimitiveClass(String name); 这个类的话 是通过其他语言(好像是C写的)实现的 (native ),咱们不用管这哥们。
这个地方涉及到老哥.class 和 老哥.TYPE 以及 int.class的区别
我这里稍微的解释一下
老哥.class 这个很好理解就是返回老哥的类型类,
老哥.TYPE 这个就是虚拟机的类对象, 其实也就是int
int.class 返回的是int
做个测试:通过反射机制,看老哥.TYPE的类型类是不是原始类型
Class<Integer> c1 = Integer.TYPE;
Class<Integer> c2 = int.class;
System.out.println(c1 == c2); // true
System.out.println(c1.isPrimitive()); // true
System.out.println(c2.isPrimitive()); // true
isPrimitive方法 确定指定类对象表示一个基本类型 ,有九个预定类对象代表八个基本数据类型和void。 这些是由Java虚拟机创建,并且具有相同的名称为他们所代表的基本类型,即boolean , byte , char , short , int , long , float和double
并且是该方法返回true的唯一类对象
结论:
c1和c2的虚拟机类对象是一样的,Integer在虚拟机中还是拆箱为int。
老哥.toString(int i, int radix)
public static String toString(int i, int radix) { if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) radix = 10; /* Use the faster version */ if (radix == 10) { return toString(i); } char buf[] = new char[33]; boolean negative = (i < 0); int charPos = 32; if (!negative) { i = -i; } while (i <= -radix) { buf[charPos--] = digits[-(i % radix)]; i = i / radix; } buf[charPos] = digits[-i]; if (negative) { buf[--charPos] = '-'; } return new String(buf, charPos, (33 - charPos)); }