知秋一叶 发表于 2009-2-6 09:34:36

java方法的传参问题

上java课的时候,老师讲java所有的参数都是pass by value,以前感觉很困惑,一直感觉对象是通过引用传递的。今天测试了一些才发现其中的奥秘。 java中如何交换两个值?对于基本类型: view plaincopy to clipboardprint?
    public static void swap(int args[]){
          int temp=args;
          args=args;
          args=temp;
      }
      public static void swap(int args[]){
            int temp=args;
            args=args;
            args=temp;
      }对于引用类型,一般也需要这种使用数组的方法。以前一直以为 swap(Object o1,Object o2)能够实现交换功能,测试过之后才知道这是自己一厢情愿的想法。在swap(Object o1,Object o2)中,o1和o2只是调用时外部对象引用值的拷贝,内部对它们的修改不会改变外部的实际值。但是如果调用了引用所指向的对象的方法的话,那确确实实是会执行的。做下面的测试验证一下: view plaincopy to clipboardprint?
    public class Test{
   
      public static void modify(StringBuffer buffer){
            buffer.append("world");
            buffer=new StringBuffer("no effect!");
      }
      public static void main(String args[]){
            StringBuffer stringBuffer=new StringBuffer("hello ");
            System.out.println(stringBuffer);
            modify(stringBuffer);
            System.out.println(stringBuffer);
      }
    }
页: [1]
查看完整版本: java方法的传参问题