我不确定标题是否最好,但我想做的事情可以在这个例子中说明
class TestClass {
public String foo = "foo"
public void makeFooBar() {
String bar = foo;
bar = "bar";
System.out.println(foo); //should print "bar"
}
}
这显然是一个人为的例子,但它说明了这一点。我想通过更改引用foo的bar的值来更改foo的值。那可能吗?
答案 0 :(得分:1)
如果您想要在多个位置更新某个值(例如,通过使用包装器对象),这可能是一种方法。当然,有更多更好的方式来完成类似的事情。
class TestClass {
public Wrapper<String> foo = new Wrapper("foo");
public void makeFooBar() {
Wrapper<String> bar = foo;
bar.set("bar");
System.out.println(foo); //should print "bar"
}
public static class Wrappper<T>
{
T value;
public Wrapper(T value)
{
this.value = value;
}
public T get() { return this.value; }
public void set(T newValue) { this.value = newValue; }
@override
public String toString() { return value.toString(); }
}
}
基本上任何原始类型都不能通过引用传递。 Althoug String在技术上不是原始类型,java确实对它有点特别。 (阅读内部Stringpool会给你一个很好的见解。在这个页面中有一个很好的解释,包括一些可视化的例子:http://www.journaldev.com/797/what-is-java-string-pool)