为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梵蒂冈之花 2019-11-11 14:07:35
我习惯在中执行以下操作C:void main() {    String zText = "";    fillString(zText);    printf(zText);}void fillString(String zText) {    zText += "foo";}输出为:foo但是,在Java中,这似乎不起作用。我认为是因为该String对象是复制的,而不是通过referenced传递的。我以为字符串是对象,总是通过引用传递。这里发生了什么?
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您有三种选择:


使用StringBuilder:


StringBuilder zText = new StringBuilder ();

void fillString(StringBuilder zText) { zText.append ("foo"); }

创建一个容器类,并将容器的实例传递给您的方法:


public class Container { public String data; }

void fillString(Container c) { c.data += "foo"; }

创建一个数组:


new String[] zText = new String[1];

zText[0] = "";


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

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


查看完整回答
反对 回复 2019-11-11
?
交互式爱情

TA贡献1712条经验 获得超3个赞

在Java中,没有任何东西通过引用传递。一切都是通过价值传递的。对象引用按值传递。另外,字符串是不可变的。因此,当您将附加到传递的字符串后,便会得到一个新的字符串。您可以使用返回值,也可以传递StringBuffer。


查看完整回答
反对 回复 2019-11-11
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

发生的事情是按值传递了引用,即,传递了引用的副本。java中的任何内容都不会通过引用传递,并且由于字符串是不可变的,因此该分配创建了一个新的字符串对象,引用的副本现在指向该对象。原始引用仍指向空字符串。


对于任何对象,这都是相同的,即在方法中将其设置为新值。下面的示例使事情变得更加显而易见,但是连接字符串实际上是同一回事。


void foo( object o )

{

    o = new Object( );  // original reference still points to old value on the heap

}


查看完整回答
反对 回复 2019-11-11
  • 3 回答
  • 0 关注
  • 484 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信