+2

Java SE 8 Oracle Certified Associate 1Z0-808 - #6

1. Câu hỏi

2. Phân tích

Đây cũng là 1 câu hỏi khó, cần hiểu rõ về cách quản lý bộ nhớ, HEAP, STACK và cả hàm clone() của object image.png

Giải thích theo hình bên trên.

  1. ArrayList<Counter> original = new ArrayList<>(); => Tạo 1 ArrayList object [Giả thiết ở địa chỉ 15EE00] và biến 'original' trở đến địa chỉ này.

  2. original.add(new Counter(10)); => Tạo 1 Counter object [Giả thiết ở địa chỉ 25AF06]. Set phần tử index 0 chỉ vào 25AF06.

  3. ArrayList<Counter> cloned = (ArrayList<Counter>) original.clone(); => Xem chi tiết hàm clone của ArrayList

Returns a shallow copy of this ArrayList instance. (The elements themselves are not copied.)

original.clone() Tạo ra 1 Object mới, [Giả thiết ở địa chỉ 45BA12] và copy nội dung của ArrayList tại [15EE00].

Khi đó original != cloned nhưng original.get(0) == cloned.get(0). 4. cloned.get(0).count = 5; => cloned.get(0) tham chiếu đến 25AF06, khi đó cloned.get(0).count = 5; sẽ sửa giá trị tại vùng nhớ đó.

  1. System.out.println(original); Vì original vẫn dùng vùng nhớ {25AF06} nên sử dụng giá trị được update.

Đáp án: image.png

3. Kết luận

Bạn có thể gõ code vào IDE để chạy lại và kiểm tra Source cho câu hỏi


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.