2016-02-07 4 views
0

Я изучаю ООП и получаю некоторое назначение при создании объектных ссылок и контрольных результатов. Я получил класс Book и класс BookTest, где в классе BookTest я делаю 4 ссылки на объект Book.Неожиданный вывод при повторной присвоении объектной ссылки

A Book имеет имя и функцию, чтобы получить имя этой книги.

class Book { 
    private String name; 

    public Book(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return this.name; 
    } 
} 

Ссылки на Book объект выглядит следующим образом:

Book b1 = new Book("The story of ..."); 
Book b2 = b1; 
Book b3 = new Book("Second story"); 
Book b4 = new Book("Third story"); 

Это все прекрасно работает, когда я распечатать b2.getName() я получить ожидаемый "The story of ..." строку.

Но всякий раз, когда я добавить эту строку перед печатью b2.getName() линии:

b1 = b3; 

Я ожидал b2.getName() быть "Second story", потому что b1 был назначен b3. На самом деле это строка "The story of ...".

Почему это?

+0

b1 присвоен объект книги, на который указывает b3. Но b2 не получил ничего нового ... –

ответ

1
Book b1 = new Book("The story of ..."); 
Book b2 = b1; 
Book b3 = new Book("Second story"); 
Book b4 = new Book("Third story"); 

enter image description here

После b1 = b3; ссылка b1 ссылается на b3, но не на b2.

enter image description here

Я надеюсь, что это полезно, чтобы понять.

+0

Спасибо за это, но вы можете объяснить процесс, почему 'b2' остается на' b1'? – Bas

+0

, потому что вы делали это изменение ссылки на объект 'b1' на 'b3'. это не влияет на «b2». Если вы хотите изменить «b2». вы должны определить «b2 = b3», что означает, что ссылка «b2» также указывает на значение «b3». –

+0

Хорошо, но почему это правило не применяется к назначению 'b2 = b1'? Сейчас это путают. – Bas

0

Вы понимаете неправильно.

Если вы:

b2=b1; 

И потом:

b1=b3; 

b2 еще с прежней ссылкой на b1:

Book b1 = new Book("The story of ..."); 
Смежные вопросы