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

在Java中通过引用传递字符串?

尉迟浩思
2023-03-14
问题内容

我习惯在中执行以下操作C

void main() {
    String zText = "";
    fillString(zText);
    printf(zText);
}

void fillString(String zText) {
    zText += "foo";
}

输出为:

foo

但是,在Java中,这似乎不起作用。我认为是因为该String对象是复制的,而不是通过referenced传递的。我以为字符串是对象,总是通过引用传递。

这里发生了什么?


问题答案:

你有三种选择:

  1. 使用StringBuilder:
StringBuilder zText = new StringBuilder ();
void fillString(StringBuilder zText) { zText.append ("foo"); }
  1. 创建一个容器类,并将容器的实例传递给你的方法:
public class Container { public String data; }
void fillString(Container c) { c.data += "foo"; }
  1. 创建一个数组:
new String[] zText = new String[1];
zText[0] = "";

void fillString(String[] zText) { zText[0] += "foo"; }

从性能的角度来看,StringBuilder通常是最佳选择。



 类似资料:
  • 问题内容: 这两个代码有什么区别: 代码A: 哪里 VS. 代码B: 这两个代码之间有什么区别吗? 问题答案: Java始终按值传递参数,而不按引用传递参数。 让我通过一个例子解释一下: 我将逐步解释这一点: 声明一个名为ftype 的引用,Foo并将其分配给Foo具有属性的type的新对象”f”。 从方法方面,声明Foo具有名称的类型引用,a并将其初始分配给null。 调用方法时changeRe

  • 问题内容: 通过此链接:如何通过引用传递变量?我们知道,Python在将字符串(作为不可变类型变量)作为参数传递给函数时会复制它,但是我认为如果字符串很大,它将浪费内存。在许多情况下,我们需要使用函数来包装一些字符串操作,所以我想知道如何使其更有效? 问题答案: Python不会复制传递给函数的对象(包括字符串): 如果您需要“修改”函数中的字符串,请返回新字符串并将其分配回原始名称: 不幸的是,

  • 问题内容: 因此,我正在阅读这篇文章,并没有回复。2.在该示例中,调用该方法后,地址42处的Dog值是否更改为Max? 问题答案: Java通过值传递- 始终 为基元和对象传递值。 就对象而言,传递的是对存在于堆中的对象的引用。当传入引用时,方法不能更改该引用所指向的内容。 如果该引用指向具有可变数据的对象,则该方法可以更改其状态。 摘自Ken Arnold和James Gosling撰写的“ J

  • 我在做一个leetcode问题(https://leetcode.com/problems/reverse-string/)当一个数组被传递给一个方法时,该方法通过将数组指向一个新创建的数组来改变数组。但我发现调用函数中的数组保持不变?在java中数组是通过引用传递的,所以情况不应该是这样吗? 输出:

  • 问题内容: 我有以下代码: 有人可以解释为什么输出是:零一二二。 摘自zend认证学习指南。 问题答案: 因为在第二个循环中,仍然是对最后一个数组项的引用,所以每次都将其覆盖。 您可以看到这样的内容: 如您所见,最后一个数组项采用当前循环值:“零”,“一个”,“两个”,然后就是“两个” …:)

  • 可能重复: 是传递const std::string的天数 如果支持移动语义学,我应该通过值传递d::字符串吗?那么使用小字符串优化(SSO)的实现呢?