这是一个回到基础的问题(我认为)虽然让我难以理解我最近与一些朋友进行的编码项目。
以下是代码变体之一:
public class Test {
private String test;
public Test(){
test = "tester";
changeString(test);
}
public void changeString(String t){
t = "blue apples";
}
public String getTest(){
return test;
}
public static void main(String[] args){
Test t = new Test();
System.out.println(t.getTest());
}
}
为什么程序打印出“测试者”而不是“蓝苹果”?方法changeString(String)不应该将字段'test'变成“blue apples”吗?
感谢您的回复!
答案 0 :(得分:1)
Java是按值传递的,不是通过引用传递的。因此,对传递的t
字符串所做的更改不会反映在您的test
字符串中。
public void changeString(String t){
t = "blue apples";
test = t; // Include this line to assign the value of `t` to `test`.
}
答案 1 :(得分:0)
你在做,
test = "tester";
changeString(test);
String在java中是不可变的。
public void changeString(String t){
t = "blue apples";
}
在上面的行中,您要更改传递给该方法的参数的值,而不是test
。
要查看更改,请尝试
public void changeString(String t){
t= "blue apples";
test=t; // now assigned the value
}
答案 2 :(得分:0)
首先,您将"Tester"
分配给test
。接下来,您致电changeString
,将test
。
此方法只是将"blue apples"
分配给t
。这样做,它会在进行分配之前创建一个新的String
。由于t
是按值传递的,因此当方法返回
相反,你需要做更像......的事情。
public void changeString(String t){
text = t;
}
并使用changeString("blue apples");
或
public String changeString(){
return "blue apples";
}
并使用test = changeString();
答案 3 :(得分:0)
字符串在JAVA中是不可变的。 Immutablity意味着一旦创建了一个实例,它就会保持不变。在你的情况下
与String一样,所有其他包装类也是不可变的。你会在Integer,Boolean对象
中观察到相同的行为答案 4 :(得分:-1)
这是因为String对象是不可变的,因此无法在赋值后更改其值。您可以使用StringBuffer或StringBuilder isntead