level 1
public class Test{public static void swap(String x,String y){String tmp=x;x=y;y=tmp;}public static void main(String[] args){String a=new String("AAA");String b=new String("BBB");swap(a,b);}}如上的代码...String 不是 Pass By Reference 么??为什么 实现不了交换 呢 。。。。需要理由哦~~谢谢啦~~~~
2007年11月15日 14点11分
1
level 0
因为在类方法的定义中是先对行参进行地址传递,然后对形参修改,所以对原来的变量不产生影响.
2007年11月16日 06点11分
4
level 6
根据LZ的意思我把程序修改了下现在可以实现你的要求了.public class Test10 {public static void swap(String x, String y) {String temp = x;x = y;y = temp;System.out.println(x + "\n" + y);}public static void main(String[] args) {String a=new String("AAA"); String b=new String("BBB"); swap(a,b); }}2楼理解不对。4楼是
正确的
。
2007年11月16日 10点11分
5
level 1
谢谢了...能否再说通俗点...我还是不太明白C++ 中通过传递 Reference 或者 Pointer 都可以实现交换的Java 中String 类传递默认不就是 By reference 的?可为什么不行 呢 ?~~~
2007年11月16日 11点11分
6
level 0
你的程序中有两个形式参数x和y,在调用方法的时候,由于是String类型的变量,程序先将实际参数a,b的地址分别赋给x和y,于是x和a就成了相同对象的不同名字,y和b也相类似,在方法的定义中,其实是在对x,y,temp三个变量交换地址,而并没有改变地址中存储的对象,而且,a和b的地址也没有发生改变,因此方法虽然成功地交换了x和y的地址,却没有改变a和b的地址和存储在该地址中的对象,因此会产生错误的输出结果.
2007年11月16日 11点11分
7