我有一个非常尴尬的问题...
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/