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
*/