解决方案 »

  1.   

    刚好看到了,其实我是个新人,,哈哈,外覆类这概念我不熟悉,不过i++可以运行是因为java支持自动装箱和自动拆箱的缘故。
      

  2.   

    Integer支持++运算符是因为Integer包装器类内部重载(operator)了++运算符。
      

  3.   

    可是,如果我写成这样:
    Integer i = new Integer(1);
    Integer j = i;
    j++;
    System.out.println("Integer i is: " + i);
    打印的结果仍然是1,而不是2
    j和i指向的是同一块内存吧,通过j++的操作为什么不能把i的值加1呢
      

  4.   

    看一下Integer中的构造方法和hashcode方法:
    private final int value; public Integer(int value) {
    this.value = value;
        } public int hashCode() {
    return value;
        }
    其它类的hashcode方法,例如HashMap中的:
     public int hashCode() {
    int h = 0;
    Iterator<Entry<K,V>> i = entrySet().iterator();
    while (i.hasNext())
        h += i.next().hashCode();
    return h;
        }
    Thread类中的hashcode方法:
    public native int hashCode();ok,hashcode是经过计算后的所谓地址,有些可以可以看得见,有些看不见,但是要知道的是Integer里面就是返回的value的值!
      

  5.   


    Integer确实是返回了value的值,不过我把Integer向上转型为Object后,它调用的不是Object的hashCode()吗?还是说,仍然调用了Integer的hashCode()?
      

  6.   

    可是,如果我写成这样:
    Integer i = new Integer(1);
    Integer j = i;
    j++;
    System.out.println("Integer i is: " + i);
    打印的结果仍然是1,而不是2
    j和i指向的是同一块内存吧,通过j++的操作为什么不能把i的值加1呢
    j和i指向的根本就不是同一块内存,Integer j = i;表示用i的值去构造j,而不是生命了另一个引用,包装器类跟普通的类在这点上是有本质区别的。
      

  7.   

    可是,如果我写成这样:
    Integer i = new Integer(1);
    Integer j = i;
    j++;
    System.out.println("Integer i is: " + i);
    打印的结果仍然是1,而不是2
    j和i指向的是同一块内存吧,通过j++的操作为什么不能把i的值加1呢
    j和i指向的根本就不是同一块内存,Integer j = i;表示用i的值去构造j,而不是生命了另一个引用,包装器类跟普通的类在这点上是有本质区别的。
    哦,这样的话就理解了,还没有完整的明白外覆类的各种特质。谢谢指教~
      

  8.   


    Integer确实是返回了value的值,不过我把Integer向上转型为Object后,它调用的不是Object的hashCode()吗?还是说,仍然调用了Integer的hashCode()?
    对比!
      

  9.   

    参考一下:http://wenku.baidu.com/link?url=kx8KkrGYfNHsj64E7_ch1rlwS2JBcWLoNHSGfo0GIkwBHqp1hSxUzMg34qtGGIHcsEfxB5X-rK43Xje8NQrbISbBRENxPI_erYYA2xCWIgC
    参考一下:http://blog.sina.com.cn/s/blog_4fdb887b0101479q.html
      

  10.   


    Integer确实是返回了value的值,不过我把Integer向上转型为Object后,它调用的不是Object的hashCode()吗?还是说,仍然调用了Integer的hashCode()?
    对比!明白!
    谢ganshenml~  调用Object的hashCode()是我自以为的,实践出真知!
      

  11.   


    Integer确实是返回了value的值,不过我把Integer向上转型为Object后,它调用的不是Object的hashCode()吗?还是说,仍然调用了Integer的hashCode()?
    对比!明白!
    谢ganshenml~  调用Object的hashCode()是我自以为的,实践出真知!嗯嗯!