mer*_*esi 25 java string parameters immutability pass-by-reference
我发现以下问题是Java"pass-by-reference"还是"pass-by-value"?.
我几乎阅读了所有内容,但是如果我想要这个foo(-)方法,我还不知道该怎么做才能改变我String的价值?(也许或不参考,对我来说无关紧要).
void foo(String errorText){
errorText="bla bla";
}
int main(){
String error="initial";
foo(error);
System.out.println(error);
}
Run Code Online (Sandbox Code Playgroud)
我想bla bla在控制台上看到.可能吗?
Jac*_*nds 38
您无法errorText在foo当前声明的方法中更改in 的值.即使您传递字符串的引用errorText到foo,Java的Strings为不可变的-你不能改变它们.
但是,您可以使用StringBuffer(或StringBuilder).可以在您的foo方法中编辑这些类.
public class Test {
public static void foo(StringBuilder errorText){
errorText.delete(0, errorText.length());
errorText.append("bla bla");
}
public static void main(String[] args) {
StringBuilder error=new StringBuilder("initial");
foo(error);
System.out.println(error);
}
}
Run Code Online (Sandbox Code Playgroud)
其他解决方案是使用包装类(创建一个类来保存String引用,并更改引用foo),或者只返回字符串.
使用方法的返回值或创建包装类.
让它返回值:
String foo(String errorText){
return "bla bla";
}
int main(){
String error="initial";
error = foo(error);
System.out.println(error);
}
Run Code Online (Sandbox Code Playgroud)
将值包装在对象中:
class StringWrapper {
private String string;
public StringWrapper(String s) {
this.string = s;
}
public String getString() {
return this.string;
}
public void setString(String s) {
this.string = s;
}
}
void foo(StringWrapper errorText){
errorText.setString("bla bla");
}
int main(){
StringWrapper error=new StringWrapper("initial");
foo(error);
System.out.println(error.getString());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31772 次 |
| 最近记录: |