1. 关于Integer

Integer类,使用32位表示整数值,范围-2^31 至 2^31-1。是int这个java基本类型的包装类型,类全称为java.lang.Integer。该类封装了有关int操作的各种方法,包括字符串与数值的转换,获取对应数值,比较大小等各种数值操作。
Integer和int类型通过自动装箱和拆箱机制,可以相互赋值

Integer integer1   = 12; //自动装箱
 int a = integer1 ;  //自动拆箱

2. Integer转化



int类型与其他各类型的转换,总结有2类,一是数值类型间的转化,int与float,double,byte等的转化,此类方法格式均为typeValue()样式。另一类是与字符串的转化,使用parseInt()方法。先看第一类:

1. 与数值类的转换

public class TestInteger {
    public static void main(String[] args) {
        Integer a = 23;
        float f = a.floatValue();
        double d =a.doubleValue();
        long l = a.longValue();
        int i = a.intValue();
        byte b = a.byteValue();
        System.out.println("b = " + b);
        System.out.println("f = " + f);
        System.out.println("l = " + l);
        System.out.println("d = " + d);
        System.out.println("i = " + i);
    }
}

/** 输出:
  b = 23
  f = 23.0
  l = 23
  d = 23.0
  i = 23
*/

就是将int类型的值强转为其他各数值类型的值,你可能会说,我用(float)a 之类的也能转化啊,对了,这些方法也是这样转的,如转double类型。不过使用现成的方法可以使代码更简洁好看。

public double doubleValue() {
        return (double)value;
    }

2. 与字符串的转换

与字符串转化使用 parseInt(String),也可指定需转为的基数,如转为八进制的整数: parseInt(s,8);

public class TestInteger {
    public static void main(String[] args) {
        String s = "345";  //普通整数
        int a = Integer.parseInt(s);  //默认10进制
        System.out.println("a = " + a);

        String s1 = "123ad"; //对于10进制来说,它不是一个数值,但对于16进制的数,它是合法的
        int a1 = Integer.parseInt(s1, 16);
        System.out.println("a1 = " + a1);
    }
}
/**
 * output:
 a = 345
 a1 = 74669
 */

需要强调的是:
1. parseInt(String,int) 可以传的位数范围是(2,32),注意不包括边界。
2. 需要转换的字符串的表示方式需和其位数相对,否则会报错。

3. valueOf()与缓存

valueOf() 可以认为是Integer的工厂方法,事实上,所有值类都有一个类似的valueOf()方法,且其功能也大致相同。
Integer类的valueOf()方法有:

public static Integer valueOf(String s)

public static Integer valueOf(String s, int radix) 

public static Integer valueOf(int i)

valueOf()根据传来的数值或字符串(由parseInt()将字符串再转为数值),返回包装好的Integer类对象。然而,为节省成本,当我们的数值在-128-127之间时,valueOf()不会再创建对象,而是从缓存中取。缓存时第一次创建Integer时创建的。

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high) //IntegerCache.low=-128,IntegerCache.high默认为127,可以在JVM参数中修改
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

请看下面示例代码:

Integer a = 12;
        Integer b = Integer.valueOf(12);     
        System.out.println(a==b);

        Integer a2 = 210;
        Integer b2 = Integer.valueOf(210);
        System.out.println(a2==b2 );

   /**
   true
   flase
   */