由2+2=5对缓存池进行粗略了解

public class ChangeTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception { 
        Class cache = Integer.class.getDeclaredClasses()[0]; 
        Field c = cache.getDeclaredField("cache"); 
        c.setAccessible(true); 
        Integer[] array = (Integer[]) c.get(cache); 
        //因为对于-128到127之间的数,会进行缓存,array里面的值就是-128到127.
        //而array[132]原本为第132位数的地址
        //这个时候讲132位的地址进行变更,为第133位,即为5
        //每次取4的时候都是从缓存池中取的
        array[132] = array[133];
        System.out.println(2+2);
        System.out.printf("%d",2 + 2); // "o"表示输出十进制整数。
        System.out.printf("%o", 2+2);// "o"表示输出八进制整数。
        System.out.printf("%x", 2+2);// "o"表示输出十六进制整数。
        System.out.println("测试Integer-----------------");
        integerTest();
    } 
	
	//测试Integer
	private static void integerTest(){
		int i = 128;
        Integer i2 = 128;
        Integer i3 = new Integer(128);
        //Integer会自动拆箱为int,所以为true
        System.out.println(i == i2);
        System.out.println(i == i3);
        System.out.println("**************");
        Integer i5 = 127;//java在编译的时候,被翻译成-> Integer i5 = Integer.valueOf(127);
        Integer i6 = 127;
        System.out.println(i5 == i6);//true
        /*Integer i5 = 128;
        Integer i6 = 128;
        System.out.println(i5 == i6);//false
*/        Integer ii5 = new Integer(127);
        System.out.println(i5 == ii5); //false
        Integer i7 = new Integer(128);
        Integer i8 = new Integer(123);
        System.out.println(i7 == i8);  //false
    }

}

你可能感兴趣的:(由2+2=5对缓存池进行粗略了解)