我正在尝试在Java中交换两个字符串。我从未真正理解过“字符串是不可变的”。我从理论上了解它,但在实践中从未见过。
另外,由于String是Java中的对象,而不是原始类型,所以我不明白为什么下面的代码两次打印相同的结果,而不是交换单词!
public static void main(String[] args) { String s1 = "Hello"; String s2 = "World"; System.out.println(s1 + " " + s2); Swap(s1, s2); System.out.println(s1 + " " + s2); } public static void Swap(String s1, String s2) { String temp = s1; s1 = s2; s2 = temp; }
我要打印
Hello World World Hello
但这是印刷
Hello World Hello World
我认为s1和s2是引用,因此应该交换引用,而新引用应分别指向另一个引用。我要去哪里错了?
我认为s1和s2是引用,因此应该交换引用,而新引用应分别指向另一个引用。
是。在本地 内部 swap,这正是发生的情况。
swap
但是,s1和s2是传递给函数的引用的 副本 ,因此效果保持局部性。请注意,不是复制的字符串(因为String是引用类型)。但是引用 被 复制了。
s1
s2
String
…并且由于参数引用 始终 是用Java复制的,swap因此根据您的规范编写函数非常简单。
如果您在理解区别上有困难,请考虑以下问题:您想给朋友写一封信,以便将其通讯地址从通讯录复制到信封上。通过此过程,您当然不会复制她的房屋(实际上复制整个房子有点困难)–您只复制了地址。
好吧,一个地址 指的 是她的家,所以它就像一个Java参考。