从头开始学JDK-------Integer
目录
* Integer # valueOf(String) : Integer
* Integer # compareTo(Integer):int
* Integer # toString(int,int):String
* Integer # parseInt(String,int):int
* Integer构造
Integer是基本数据类型int的包装类。内部维护了一个int 对象,需要在初始化的时候指明。
第一个构造函数接收一个int数字,维护到内部的value中。
第二个构造函数解析 String类型的字符串,把字符串解析为10进制的数字。抛出RuntimeException的子类异常NumberFormatException
public final class Integer ...
private final int value;
public Integer(int value) {
this.value = value;
}
public Integer(String s) throws NumberFormatException {
this.value = parseInt(s, 10);
}
* 衍生 Integer最大值是多少?
Integer占4个字节,共4*8 = 32位,除去符号位共31位能存放数据,所以最大值是2^31次方 - 1。
至于为什么要减1,因为达到最大值就要进一位了。例如十进制中最大的两位数是 10^2 - 1。
最小值是 -2^31次方
int i = Integer.MAX_VALUE + 1;
//true
System.out.println(new Integer(i).intValue() == Integer.MIN_VALUE);
int j = Integer.MAX_VALUE + 2;
//true
System.out.println(j == (Integer.MIN_VALUE + 1));
* Integer # valueOf(int i)
静态方法valueOf方法内部使用了缓存机制,即Integer对象内部维护了一个缓存池。
当int数字在 [ -128 ,127]之间的时候,返回内部池子中的对象。
public static Integer valueOf(int i) {
//IntegerCache.low = -128
//IntegerCache.high = 127
if (i >= IntegerCache.low && i <= IntegerCache.high){
return IntegerCache.cache[..];
}else{
return new Integer(i);
}
}
* 衍生 自动装箱也是调用的这个静态方法
Integer i1 = 100; 等价于 Integer i1 = Integer.valueOf(100);
i2是新创建的一个对象,分配的是一块新的堆内存地址。
Integer i1 = 100; // ==> Integer i1 = Integer.valueOf(100);
Integer i2 = new Integer(100);
Integer i3 = Integer.valueOf(100);
//false
System.out.println(i1 == i2);
//true
System.out.println(i1 == i3);
* Integer # valueOf(String) : Integer
Integer的parseInt方法能把字符串按照指定进制(默认10进制)解析成数字。
class Integer
public static Integer valueOf(String s)
throws NumberFormatException{
return Integer.valueOf( parseInt(s,10) );
}
//true
Integer.valueOf(100) == Integer.valueOf("100");
* Integer # equals
比较的是两个Integer对象的内部的int value值。
class Integer ...
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
* Integer # compareTo(Integer):int
与另外的一个Integer比较大小,如果比另外一个大,返回1
public int compareTo(Integer anotherInteger) {
return compare(this.value, anotherInteger.value);
}
public static int compare(int x, int y) {
return (x < y) ? -1 : ((x == y) ? 0 : 1);
}
* Integer # toString():String
把内部的value操作成字符串。
public String toString() {
return toString(value);
}
public static String toString(int i) {
...
// char [] buf
return new String(buf, true);
}
* Integer # toString(int,int):String
第一个参数是int数字,第二个参数是几进制。
* Integer # parseInt(String,int):int
按照指定进制,解析字符串,返回int数字。第一个参数为null会报错。
// java.lang.NumberFormatException: null
Integer.max(1,new Integer(null));
public Integer(String s) throws NumberFormatException {
this.value = parseInt(s, 10);
}
* Integer # max、min、sum
数字函数,见名知意。别忘了用。
* Integer # extends Number
public abstract class Number ...
public abstract int intValue();
public abstract long longValue();
public abstract float floatValue();
public abstract double doubleValue();
}
class Integer extends Number ...
private final int value;
public int intValue() {
return value;
}
public long longValue() {
return (long)value;
}
public double doubleValue() {
return (double)value;
}
public float floatValue() {
return (float)value;
}