gpt4 book ai didi

java - 在 Java 中交换两个字符串,通过将它们传递给实用函数,但不返回对象或使用包装类

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:27:52 24 4
gpt4 key购买 nike

我正在尝试在 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 是引用,因此应该交换引用,新的应该分别指向另一个。我哪里错了?

最佳答案

I thought s1 and s2 are references and hence the references should be swapped and the new ones should point to the other one respectively.

是的。在本地 swap 中,这正是发生的事情。

但是,s1s2 是传递给函数的引用的副本,因此效果仍然是局部的。请注意,复制的不是字符串(因为 String 是引用类型)。但是引用复制了。

…并且由于在 Java 中参数引用总是被复制,所以很简单,根据您的规范编写一个swap 函数是不可能的。

如果您无法理解其中的区别,请考虑以下情况:您想给一位 friend 写一封信,因此您将她的邮政地址从您的地址簿复制到一个信封上。通过这个过程,你当然没有复制她的家(复制整个房子在实践中有点困难)——你只复制了地址。

好吧,一个地址指向她的家,所以它就像一个 Java 引用。

关于java - 在 Java 中交换两个字符串,通过将它们传递给实用函数,但不返回对象或使用包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3698323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com