Yur*_*ura 24 java string function pass-by-reference
我有这个非常尴尬的问题......
void changeString(String str){
str = "Hello world":
}
main(){
String myStr = new String("");
changeString(myStr);
}
Run Code Online (Sandbox Code Playgroud)
当main返回时,该值仍然""不"Hello world".这是为什么?
另外,我如何使其工作?假设我希望我的函数changeString将其变为"Hello world"的字符串.
Nul*_*ion 35
每个人都解释了为什么它不起作用,但没有人解释如何使它工作.最简单的选择是使用:
String changeString() {
return "Hello world";
}
main() {
String myStr = new String("");
myStr = changeString();
}
Run Code Online (Sandbox Code Playgroud)
虽然方法名称在这里用词不当.如果您使用原始想法,则需要以下内容:
void changeString(ChangeableString str) {
str.changeTo("Hello world");
}
main() {
ChangeableString myStr = new ChangeableString("");
changeString(myStr);
}
Run Code Online (Sandbox Code Playgroud)
你的ChangeableString课可能是这样的:
class ChangeableString {
String str;
public ChangeableString(String str) {
this.str = str;
}
public void changeTo(String newStr) {
str = newStr;
}
public String toString() {
return str;
}
}
Run Code Online (Sandbox Code Playgroud)
在Java方法中,所有内容都按值传递.这包括参考.这可以通过以下两种不同的方法来说明:
void doNothing(Thing obj) {
obj = new Something();
}
void doSomething(Thing obj) {
obj.changeMe();
}
Run Code Online (Sandbox Code Playgroud)
如果doNothing(obj)从main()(或任何地方)obj调用,将不会在被调用者中进行更改,因为doNothing创建了一个new Thing并obj 在方法范围内指定了新引用.
另一方面,在doSomething你正在召唤obj.changeMe(),并且那些取消引用obj- 这是通过价值传递 - 并改变它.
| 归档时间: |
|
| 查看次数: |
39162 次 |
| 最近记录: |