gpt4 book ai didi

函数中的Java字符串值变化

转载 作者:IT老高 更新时间:2023-10-28 20:26:27 26 4
gpt4 key购买 nike

我有一个非常尴尬的问题...

void changeString(String str){
str = "Hello world":
}

main(){
String myStr = new String("");
changeString(myStr);
}

main 返回时,该值仍然是 "" 而不是 "Hello world"。这是为什么呢?

另外,我该如何让它工作?假设我希望我的函数 changeString 将它得到的字符串更改为“Hello world”。

最佳答案

每个人都解释了为什么它不起作用,但没有人解释如何使它起作用。您最简单的选择是使用:

String changeString() {
return "Hello world";
}

main() {

String myStr = new String("");
myStr = changeString();
}

虽然方法名称在这里用词不当。如果你要使用你最初的想法,你需要这样的东西:

void changeString(ChangeableString str) {
str.changeTo("Hello world");
}

main() {

ChangeableString myStr = new ChangeableString("");
changeString(myStr);
}

您的 ChangeableString 类可能是这样的:

class ChangeableString {
String str;

public ChangeableString(String str) {
this.str = str;
}

public void changeTo(String newStr) {
str = newStr;
}

public String toString() {
return str;
}
}

关于引用的快速类(class):

在 Java 方法中,一切都是按值传递的。这包括引用。这可以通过以下两种不同的方法来说明:

void doNothing(Thing obj) {
obj = new Something();
}

void doSomething(Thing obj) {
obj.changeMe();
}

如果您从 main()(或任何地方)调用 doNothing(obj),则 obj 不会在被调用者,因为 doNothing 创建了一个新的 Thing 并将该新引用分配给 obj 在方法的范围内

另一方面,在 doSomething 中,您正在调用 obj.changeMe(),并且取消引用 obj - 它是按值传递的- 并改变它。

关于函数中的Java字符串值变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3486393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com