import java.util.Stack;
public class Example {
   public static void main(String arg[]) {
      Stack s1 = new Stack();
      Stack s2 = new Stack();
      method(s1, s2);
      System.out.println("s1 is " + s1 + " s2 is " + s2);
   }
   public static void method(Stack s1, Stack s2) {
      s1.push(new Integer(200));
      s2.push(new Integer(100));
      s1 = s2; 
  }
}输出结果为:s1 is [200] s2 is [100] 我是菜虫,哪位大哥大姐帮我分析下,谢了

解决方案 »

  1.   

    这是值传递的效果。函数里的s1和函数外的s1是两个不同的堆栈中对象(其实就是地址),虽然他们指向相同的堆中对象。你如果操作函数内s1的对象,那么外面s1的对象也会变,因为本来就是同一个。
    但如果你操作函数内s1本身,使它指向另外一个地址,那么跟函数外s1没任何关系。s2同样。看看我发的贴吧:
    [值传递的引用传递的区别]
    http://community.csdn.net/Expert/topic/3999/3999829.xml
      

  2.   

    java是by value方式的,老问题也是基本问题,实在没啥好分析的你上面的函数其实相当于(内部实现的示意)
     public static void method(Stack s1, Stack s2) {
          temp1 = s1;
          temp2 = s2;      temp1.push(new Integer(200));
          temp2.push(new Integer(100));
          
          temp1 = temp2;  //虽然temp1引用的是s2,但根本不会改变外部的s1和s2的引用
      }
      

  3.   

    import java.util.Stack;
    public class Example {
       public static void main(String arg[]) {
          Stack s1 = new Stack();
          Stack s2 = new Stack();
          method(s1, s2);
          System.out.println("s1 is " + s1 + " s2 is " + s2);   s1 = s2;  ///////////// 
       }
       public static void method(Stack s1, Stack s2) {
          s1.push(new Integer(200));
          s2.push(new Integer(100));
       
      }
    }楼主 你现在看看结果呢???
      

  4.   

    mport java.util.Stack;
    public class Example {
       public static void main(String arg[]) {
          Stack s1 = new Stack();
          Stack s2 = new Stack();
          method(s1, s2);
          s1 = s2;   ///////////// 
          System.out.println("s1 is " + s1 + " s2 is " + s2);
       }
       public static void method(Stack s1, Stack s2) {
          s1.push(new Integer(200));
          s2.push(new Integer(100));
          
      }
    }楼上说的是这个意思吧? 我懂了 呵呵 谢谢楼上的兄弟们
      

  5.   

    FAINT!两个答得最深入的没分。看来得根据提问者的能力回答!