新手, 问个简单的问题

gradeyong 2007-05-18 04:43:20
public class HelloWorld {

/**
* @param args
*/
public static void swap(String first, String second) {
String temp;
temp = first;
first = second;
second = temp;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String i = "hello", j = "world";
System.out.print("Hello world!");
System.out.print(i + " " + j);
swap(i, j);
System.out.print(i + " " + j);
}
}

为啥程序运行后, 最后一个out.pring应该输出world hello, 可是为什么还是hello world呢? 错在哪里? 请指教, 谢谢

...全文
270 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
honest_man 2007-05-18
  • 打赏
  • 举报
回复
由于字符串是一类比较特殊的对象,有一个字符串池,要实现你的要求,除非你进行引用传递,换一种其他的对象,如
public class HelloWorld {

/**
* @param args
*/
public static void swap(String [] strArray) {
String temp;
temp = strArray[0];
strArray[0] = strArray[1];
strArray[1] = temp;
}

public static void main(String[] args) {
// TODO Auto-generated method stub
String i = "hello", j = "world";
String strArray[] = new String[2];
strArray[0] = i;
strArray[1] = j;
System.out.println("Hello world!");
System.out.println(i + " " + j);
swap(strArray);
i = strArray[0];
j = strArray[1];
System.out.println(i + " " + j);
}
}
shuai45 2007-05-18
  • 打赏
  • 举报
回复
重点是参数的传递~
任何参数的传递都是其对象副本的引用.
在你程序中只是将对象副本传递给了方法~而对象本身没有发生实现的变换
所以输出依旧
gradeyong 2007-05-18
  • 打赏
  • 举报
回复
那咋改呢? 请指教
tomkai 2007-05-18
  • 打赏
  • 举报
回复
swap(i, j);

实际上是进行了对象拷贝.相当于 swap(first = i,second = j)
因此只交换了first 和 second
ENOUGH_XU 2007-05-18
  • 打赏
  • 举报
回复
一楼正解
a_nuo 2007-05-18
  • 打赏
  • 举报
回复
java的函数调用都是值传递,就是i和j的值传过去,并不是地址传递,
在swap中的first,second是另外两个对象,你实际交换的是他们两个,而并不是i和j

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧