+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
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí