Java保存对象引用如何工作?

时间:2012-10-05 06:24:55

标签: java object reference

    String a = "test";
    String b = a;

    a = "wuut";

    System.out.println(b);

打印出test

不应该b保留a的引用,而不仅仅是取其价值?

Java不能以这种方式使用对象和东西吗?

7 个答案:

答案 0 :(得分:5)

  

不应该持有a的refence,而不仅仅是拿它的价值?

没有。 a 的值是引用。引用是获取对象的一种方式,而不是变量。赋值运算符只是将右侧的表达式的值复制到左侧的变量中。这就是它所做的一切 - 它非常简单。 Java中没有pass-by-reference,没有变量别名等。

答案 1 :(得分:2)

创建a时,可以说它指向将memory_1放入内存中。

b分配给a后,b也会指向同一个memory_1位置。

现在,当a更改值(并且因为String对象是不可变的)时,现在在内存中创建一个新值,现在a中的memory_2点。

但是嘿,b仍指向memory_1

PS:Immutability是:

  

在面向对象和函数式编程中,不可变对象是一个对象,其状态在创建后无法修改。

答案 2 :(得分:0)

String a = test

所以a是指向堆上字符串文字“test”Object Reference Variable

String b = a;

没有bObject Reference Variable,也指向堆上的相同字符串文字“测试”

现在,

a = "wuut";

但是b 仍指向到字符串文字“test”

所以它的b保存对象的引用,该对象之前也被a引用,但不是a。

答案 3 :(得分:0)

不,不。 b假定a。如果a稍后更改,b则不会。它不是别名或任何性质的东西。

答案 4 :(得分:0)

String a = "test";

现在a持有对字符串“test”的引用。

String b = a;

将a的值复制到b。 A是对“test”的引用,所以现在b也是对“test”的引用。

a = "wuut";

现在为a分配了对“wuut”的引用。这不会影响b,因为b不包含对。

的引用

答案 5 :(得分:0)

没有。 b保存a的值,该值是对字符串"test"的引用。您正在考虑的是,如果您修改了指向b的字符串也会改变的字符串(类似a.append("wuut");)。但是,无法更改Java字符串,因为它们是不可变的。

答案 6 :(得分:0)

让我们一步一步地完成这个过程。

  1. String a = "test" - 在此对象上创建对象"test"并引用a点。
  2. String b = a - 创建新引用b指向同一对象"test"
  3. a = "wuut" - 将参考a重新分配给另一个对象,但引用b仍然指向对象test