这是我正在处理的类文件的简化版本,我刚刚使用这些类来显示我的问题.
public class Test {
private String string1 = null;
private String string2 = null;
private void setString(String s) {
s = "hello";
}
private void set() {
setString(string1);
setString(string2);
}
public void print() {
System.out.println(string1);
System.out.println(string2);
}
public void initialise() {
set();
print();
}
}
public class StringTest {
public static void main(String[] args) {
Test test = new Test();
test.initialise();
}
}
Run Code Online (Sandbox Code Playgroud)
无论如何,基本上,在此之后,两个字符串变量仍为null.是什么导致这个问题?我怎么能绕过它呢?(仍在学习java的基础知识 - 如果相关的话).
非常感谢任何帮助/指导.
因为String是不可变的,所以您在方法中所做的任何更改都将是该方法的本地更改.
private void setString(String s) {
s = "hello";
}
Run Code Online (Sandbox Code Playgroud)
s 无法改变.
我可以想到两个选择.
选项1
创建s一个实例变量(字段)并更改您的方法.
public class Test {private String string1 = null; private String string2 = null; private String s;
private void setString(String s) {
this.s = "hello";
}
Run Code Online (Sandbox Code Playgroud)
选项2
传入StringBuilder/ StringBuffer代替String.
您的问题是Java是按值传递的,因此您的setString方法不会执行任何操作.要更改值string1,您需要string1 = xxxx;在代码中的某处.例如:
private void set() {
string1 = getDefaultString();
string2 = getDefaultString();
}
private String getDefaultString() {
return "hello";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2707 次 |
| 最近记录: |