-1

在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);

但表现不同。我知道这是不同的,但我需要知道为什么?记忆中发生了什么??

4

3 回答 3

3

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

在图片中:

int a = 5;

给我们

+-----+
| 一个 |
+-----+
| 5 |
+-----+

Foo f = new Foo();

给我们

+-----+
| f |
+-----+ +-----------+
| 参考 |-------------->| 一个 Foo 对象 |
+-----+ +-----------+

由于持有的值f是一个引用,它引用内存中其他地方的东西。

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

int b = a;

现在我们有了

+-----+
| 一个 |
+-----+
| 5 |
+-----+

+-----+
| 乙 |
+-----+
| 5 |
+-----+

中的a已复制到b

现在假设我们这样做:

Foo f2 = f;

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

+-----+
| f |
+-----+
| 参考 |-------+
+-----+ |
              | +---------------+
+-----+ +--------| 一个 Foo 对象 |
| f2 | | +---------------+
+-----+ |
| 参考 |-------+
+-----+

中的f被复制到f2,但该值是一个引用,因此两者f和都f2 引用内存中其他地方的同一个对象。

于 2013-10-28T10:09:09.570 回答
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;

要了解有关该概念的更多信息,请点击此链接

于 2013-10-28T10:05:23.663 回答
1

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

  • 创建矩形类的对象

(2)矩形r2 = r1;

  • 在 r2 中保存对象引用

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

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

于 2013-10-28T10:07:12.200 回答