在java

时间:2016-12-05 21:15:29

标签: java variables reference

我不确定标题是否最好,但我想做的事情可以在这个例子中说明

class TestClass {
    public String foo = "foo"

    public void makeFooBar() {
        String bar = foo;
        bar = "bar";

        System.out.println(foo); //should print "bar"
    }

}

这显然是一个人为的例子,但它说明了这一点。我想通过更改引用foo的bar的值来更改foo的值。那可能吗?

1 个答案:

答案 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