没错当然不报
  void func1(MyInt mi1) {
    MyInt a1 = new MyInt(1);
    mi1 = a1;                    //只能修改mi1.abc,修改mil相当于将这个引用指向a1,不影响原来的实列a
  }

解决方案 »

  1.   

    传reference的时候传的是它的一个拷贝,意思是说创建了一个新的reference,它和原先的reference指向于同一个Object,因此在方法中改变此reference所指向的Object的值,会直接改变原先Object的值,但在方法中重新赋值给此reference是不改变原先的reference的值的,也就是说它不会改变它的指向,还是指向原来的对象。
        func1改变了在方法中mi1的引用的值,使它指向另一个对象,但对原先的reference并没影响,因此在方法外引用的还是原先的对象。
        func2改变的不是引用,而是引用所指向的对象,也即原先的reference指向的对象,使此对象的域abc变为2,然后在此方法外引用的还是原先的对象,只是此对象的域abc改变了。
      

  2.   

    func1()是改变了mil的引用,也就是说mil的引用变了,不是指向a了,而是指向了a1.func2()是改变了mil指向的对象了,因为mil指向b,所以b.abc改变了.understand?