我有一个非常尴尬的问题……
void changeString(String str){
str = "Hello world":
}
main(){
String myStr = new String("");
changeString(myStr);
}
当 main
返回时,值仍然是 ""
而不是 "Hello world"
。这是为什么?
另外,我如何让它工作?假设我希望我的函数 changeString
将它得到的字符串更改为“Hello world”。
原文由 Yura 发布,翻译遵循 CC BY-SA 4.0 许可协议
每个人都解释了为什么它不起作用,但没有人解释如何让它起作用。您最简单的选择是使用:
虽然方法名称在这里用词不当。如果你要使用你最初的想法,你需要这样的东西:
你的
ChangeableString
类可能是这样的:关于参考的快速课程:
在 Java 方法中,一切都是按值传递的。这包括参考资料。这可以通过以下两种不同的方法来说明:
If you call
doNothing(obj)
frommain()
(or anywhere for that matter),obj
won’t be changed in the callee becausedoNothing
creates一个新的Thing
并将该新引用分配给obj
_在方法的范围内_。另一方面,在
doSomething
你正在调用obj.changeMe()
,并且取消引用obj
它是按值传递的 - 并更改