当前位置: 首页 > 面试题库 >

通过将两个字符串传递给实用函数来交换Java中的两个字符串,但不返回对象或使用包装器类

都才俊
2023-03-14
问题内容

我正在尝试在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,这正是发生的情况。

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

…并且由于参数引用 始终 是用Java复制的,swap因此根据您的规范编写函数非常简单。

如果您在理解区别上有困难,请考虑以下问题:您想给朋友写一封信,以便将其通讯地址从通讯录复制到信封上。通过此过程,您当然不会复制她的房屋(实际上复制整个房子有点困难)–您只复制了地址。

好吧,一个地址 指的 是她的家,所以它就像一个Java参考。



 类似资料:
  • 我必须交换作为指针传递到函数中的两个字符字符串:bool swap_strings(char*string1,char*string2),如果两个字符串的长度不相同,则返回false;否则,如果交换成功,则返回true; 我如何才能意识到这一点?为什么这是不正确的:

  • 我有两个数组, 我如何将它转换成下面的json结构,在这里它应该以''开始,以''结束,

  • 问题内容: 我有一个值为的字符串。我想将字符串分成两个字符串,值为的字符串和的值为字符串。 正确的功能/语法是什么? 我已经看过了,但是找不到将数据返回到两个单独的字符串中的实际语法。 问题答案: 该功能适用于:

  • 问题内容: 我有这串 如何将此字符串拆分为每个子字符串包含2个字符的子字符串?我很困惑,因为我找不到分隔符来分隔它们。 问题答案:

  • 给定一个字符串,我们必须将字符串分成所有不同的两部分和三部分(排列不重要)。例如: 答案是 答案是 怎么做?你能提供一个尽可能的时间复杂度的代码吗?

  • 问题内容: 假设我们有类似的东西: 我想将“ someText”替换为其他内容。考虑到我不知道someText可能是什么(任何字符串)并且我所知道的是它将被&firstString =和&endString =包围的事实,最佳方法是什么? 编辑:对不起,看起来这还不够清楚。我不知道“ someText”可能是什么,我仅有的信息是它将位于&firstString =和&endString =之间 我