JDK5以后Java引入了Integer缓存策略。在创建新的 Integer 对象之前会先在 IntegerCache.cache 中查找。有一个专门的 Java 类来负责 Integer 的缓存。
1.Integer的缓存机制
Integer的缓存机制: Integer是对小数据(-128至127)是有缓存的,再jvm初始化的时候,数据-128至127之间的数字便被缓存到了本地内存中,如果初始化-128至127之间的数字,会直接从内存中取出,不需要新建一个对象。
注意:Integer 缓存策略仅在自动装箱的时候有用,使用构造器创建的 Integer 对象不能被缓存。
实例:
public class IntegerCacheDemo {
public static void main(String[] args) {
Integer num1 = 100;
Integer num2 = 100;
System.out.println("num1==num2 " + (num1 == num2));
Integer num3 = -128;
Integer num4 = -128;
System.out.println("num3==num4 " + (num3 == num4));
Integer num5 = 128;
Integer num6 = 128; //128不在缓存之内
System.out.println("num5==num6 " + (num5 == num6));
Integer num7 = 100;
Integer num8 = new Integer(100);//凡是new的就是不同的对象
System.out.println("num7==num8 " + (num7 == num8));
int num9 = 100;
Integer num10 = new Integer(100);
Integer num11 = 100;
// num9是int类型,num10是引用类型,==变成数值比较
System.out.println("num9==num10 " + (num9 == num10));
//==两边都是引用类型,比较是否是同一个对象。
System.out.println("num9==num11 " + (num9 == num11));
}
}
运行结果:
num1==num2 true
num3==num4 true
num5==num6 false
num7==num8 false
num9==num10 true
num9==num11 true
2.Integer实现数制转换
Integer封装了一些数制转换的静态方法。
public static void main(String[] args) {
int num = 98;
System.out.println(Integer.toBinaryString(num));
System.out.println(Integer.toOctalString(num));
System.out.println(Integer.toHexString(num));
}
运行结果:
1100010
142
62