你在执行operate(sbA,sbB);句时,每一个StringBuffer对象都同时有两个引用指向它,所以你交换时只是交换的其中一对引用(a_sbA,a_sbB),另外一对引用就是sbA,sbB仍然指向原来的对象,所以你输出的时候没有改变

解决方案 »

  1.   

    java 是靠值传递的,所以你传进去的引用是不会被改变的,只有引用所指向的对象能被改变,而随着引用一同传回来。
      

  2.   

    在Java里只有基本类型是传值的(byVal),如果想传引用就要使用相应的封装类(Integer,Double),与其它语言不同的是Java把String为基本类型,它没有相应的封装类,但可以使用StringBuffer来代替.其它由Object派生的类,都是传引用的(byRef)
      

  3.   

    java语言和C,C++语言不同,java语言在任何时候函数参数都是传值调用,你的函数体中调换的只是函数的两个参数的引用,并没有改变原来的的两个。
      

  4.   

    public class question5 {
      public question5() {
      }
      
      public static void main(String[] args) {
        StringBuffer sbA = new StringBuffer("A");
        StringBuffer sbB = new StringBuffer("B");
        operate(sbA,sbB);
        System.out.println(sbA +","+ sbB);
      }
      
      private static void operate(StringBuffer a_sbA,StringBuffer a_sbB) {
    //    a_sbA.append(a_sbB);
        a_sbA = a_sbB;  
    //    System.out.println(a_sbA);
        a_sbB = a_sbA;  
    //    System.out.println(a_sbB);
      }
    }
    在这种情况下,System.out.println(sbA +","+ sbB);中没有与operate()有关系的的操作。所以呢就没有可能影响到System.out.println(sbA+","+sbB).例如小明和小红两个人,小红拿走了一个苹果,把苹果给染成了黑色的,而小明拿了一个苹果是绿色的。那么这里问的就是小明手里的苹果是什么颜色的。自然是不变化的。