2013-10-28 6 views
-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

Хотя я очень стараюсь, я не понимаю, что вы написали. –

+0

Ваша память стирается. Ой, подождите, что? –

+0

Я думаю, он говорит, что когда вы меняете r2, меняется r1, но когда вы меняете n2, n1 остается неизменным ... но он должен был написать вывод. Это правда. – luanjot

ответ

3

переменные непосредственно содержат значения. В случае примитива значение составляет примитив. В случае ссылки на объект, это значение ссылка, а не объект.

На снимках:

int a = 5; 

дает нам

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

но

Foo f = new Foo(); 

дает нам

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

Поскольку значение, удерживаемое f, является ссылкой, оно ссылается на на что-то в другом месте в памяти.

Всякий раз, когда вы назначаете одну переменную другой (или передаете значение переменной в функцию), вы получаете копию значение, удерживаемое этой переменной.Так что, если у нас есть a и f как указано выше, и сделать это:

int b = a; 

теперь мы имеем

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

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

значение в a был скопирован b.

Теперь предположим, что мы делаем это:

Foo f2 = f; 

Помните, что f держит это ссылка, а не объект. Таким образом, мы получаем следующее:

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

значение в f был скопирован f2, но это значение является ссылкой, и так как f и f2относятся к одному объекту в другом месте в памяти.

+0

Хорошее объяснение для меня. Благодаря.. :) – CodeSac

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

+0

Спасибо тоже .. :) – CodeSac

1

(1) Прямоугольник r1 = новый прямоугольник (0, 0, 100, 50);

  • создать объект класса прямоугольника

(2) Прямоугольник r2 = r 1;

  • держать ссылку на объект в r2

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

это изменить переменную, то это изменение также показывают в r1

Смежные вопросы