如题!请详细点

解决方案 »

  1.   

    就拿 int和Integer来说吧 
    int i = new Integer(2);这就是自动解箱Integer i = 3;
    这就是自动装箱注意 jdk1.5以后才有的哟 。。
      

  2.   

    auto-boxing就是比如Integer a = 10,用以前版本的编译器是编译不过的,从语法上讲应该是Integer a = new Integer(10),不过现在的编译器可以编译通过,它给你自动在内部自动打包成:Integer a = new Integer(10)。不过有一点,java当中从-128到+127是在常量池中的,也就是说你Integer a = 10,Integer b = 10,那么这个a和b是个引用是在栈内存当中(关于栈内存和堆内存,我这里假设你清楚java虚拟机机制了哈),打包之前编译器先去常量池当中找10,如果存在则不用打包。a==b比较的是值的地址,输出为true。当出了-128到到127,这时候在常量池中就不存在这个值了,这时候编译器就自动打包比如Integer a = new Integer(128),Integer b = new Integer(128),由于是new出来的对象,他存放在堆内存中,而比较a==b比较的是a和b的栈内存引用地址输出为falsepublic class MainFrame{
        public static void main(String[] args){
            Integer a1 = 127;
            Integer b1 = 127;
            System.out.print("127==127:");
            System.out.println(a1==b1);
            
            Integer a2 = 128;
            Integer b2 = 128;
            System.out.print("128==128:");
            System.out.println(a2==b2);
            
            Integer a4 = -128;
            Integer b4 = -128;
            System.out.print("-128==-128:");
            System.out.println(a4==b4);
            
            Integer a5 = -129;
            Integer b5 = -129;
            System.out.print("-129==-129:");
            System.out.println(a5==b5);
        }
    }输出结果:127==127:true
    128==128:false
    -128==-128:true
    -129==-129:false不知道你懂了没有啊
      

  3.   

    自动装箱,拆箱 也就是 auto-boxing/auto-unboxing.例子就如2楼缩写。Integer obj = 2; // 这就是自动装箱, 编译期实际执行的是 Integer obj = Integer.valueOf(2);int i = obj;  // 这就是自动拆箱,编译器实际执行的是 int i = obj.intValue();
      

  4.   

    哥先把3楼解决了再解决你这倒分的2
    这位兄台的解释基本不对。估计是受CSDN的月经贴(xxxx创建了个几个String对象)的影响了。 首先所有的数字都在常量池中,并不是只有-128到127.其次Integer缓存了-128到127所表示的对象和常量池并无多大关系。(我说的常量池就是一般大家说的常量池 constant pool)
    给你贴上Integer.valueOf()的源代码就一切都明了了:    private static class IntegerCache {
    private IntegerCache(){} static final Integer cache[] = new Integer[-(-128) + 127 + 1]; static {
        for(int i = 0; i < cache.length; i++)
    cache[i] = new Integer(i - 128);
    }
        }    public static Integer valueOf(int i) {
    final int offset = 128;
    if (i >= -128 && i <= 127) { // must cache 
        return IntegerCache.cache[i + offset];
    }
            return new Integer(i);
        }