你交换只在swap()函数中是有效,但main()中,str1,str2 他们的实际值没有变.他们并不受swap()函数的影响.  你好好看看C语言就明白了,他们的内存地址实际上并未改变.

解决方案 »

  1.   

    public class Test {
       public String[] swap (String str1, String str2) {
          String tmp = str1; str1 = str2; str2 = tmp;
          String [] result={str1,str2};
          return result;
        }
       public static void main (String[] args) {
          String str1 = "left";
          String str2 = "right";
          String [] resulttemp=new Test().swap (str1, str2);
          System.out.println("str1: "+resulttemp[0]+" str2: "+resulttemp[1]);
       }
    };就可以了,可能是因为你的函数是无返回值的。
      

  2.   

    对,改变一下swap就可以了,swap函数的作用就是交换,但这个函数并没有起到实质性的作用,有两种方法:1用指针2用返回值,但java不提倡用1
      

  3.   

    agree on "我想应该是值传递的问题"
    String 在java中比较特殊,但偏向于基本数据类型,所以在这里是值传递;
      

  4.   

    这个问题是java中的值传递问题,在java中对基本变量传递的是值得一个副本,对于对象传递的refrence的副本,所以不会影响外边
      

  5.   

    这个,就因为我是学C++的,所以在java中碰到这个问题很困惑,
    只有一个解释,java中字符串是基本类型,是按值传递的,
    而且我没有办法获得它的地址? 那这个new 只是一个假象,并没在受控堆上分配内存?