对象之间的引用但不是原始引用。为什么???

时间:2013-10-28 10:02:58

标签: java oop

在java中,我们可以在更多引用变量中引用一个对象。但我们不能将它用于原始数据类型而不使用静态但它更加不同。

下面,

Rectangle r1 = new Rectangle(0, 0, 100, 50); 
           System.out.println(r1);

           Rectangle r2 = r1;

           r2.grow(10, 20);
           System.out.println(r1);
           System.out.println(r2);

在原语中相同,

double n1 = 150;
            double n2 = n1;

            n2 = n2 * 20; 

            System.out.println(n1);
            System.out.println(n2);

但行为不同。我知道那是不同的但我需要知道为什么?什么东西在记忆中?

3 个答案:

答案 0 :(得分:3)

变量直接包含。在基元的情况下,值基元。在对象引用的情况下,值是引用,而不是对象。

在图片中:

int a = 5;

给我们

+-----+
|  a  |
+-----+
|  5  |
+-----+

Foo f = new Foo();

给我们

+-----+
|  f  |
+-----+               +--------------+
| ref |-------------->| A Foo object |
+-----+               +--------------+

由于f所持有的值是引用,因此引用到内存中的其他位置。

每当您将一个变量分配给另一个变量(或将变量的值传递给函数)时,您复制该变量所持有的值。因此,如果我们如上所述af并执行此操作:

int b = a;

现在我们有了

+-----+
|  a  |
+-----+
|  5  |
+-----+

+-----+
|  b  |
+-----+
|  5  |
+-----+

a中的已复制到b

现在假设我们这样做:

Foo f2 = f;

请记住,f包含的是引用,而不是对象。所以我们得到了这个:

+-----+
|  f  |
+-----+
| ref |-------+
+-----+       |
              |       +--------------+
+-----+       +-------| A Foo object |
|  f2 |       |       +--------------+
+-----+       |
| ref |-------+
+-----+

f中的已复制到f2,但该值是引用,因此ff2 引用到内存中其他位置的同一对象。

答案 1 :(得分:1)

案例是,对于原语,您始终为值赋值,对于对象引用值。

int a = 10; //Assign to variable a value of 10
int b = a;  //Assigne to variable b value that is under adress of a

Object A = new Object(); // Create instance of class Object and assigne the reference to variable A;
Object B = A; // Assign the reference to  B of object under adress A;

要了解有关该概念的更多信息,请按照this link

进行操作

答案 2 :(得分:1)

(1)Rectangle r1 = new Rectangle(0,0,100,50);

  • 创建矩形类的对象

(2)矩形r2 = r1;

  • 在r2
  • 中保留对象引用

(3)r2.grow(10,20);

然后更改变量,此更改也会显示在r1