Làm cách nào để từ khóa final
không tạo biến bất biến? Wikipedia says it doesn't.Từ khóa cuối cùng của Java cho các biến
Trả lời
Trong Java, thuật ngữ cuối cùng là tham chiếu trong khi bất biến là các đối tượng. Chỉ định công cụ sửa đổi final
cho tham chiếu có nghĩa là nó không thể thay đổi để trỏ đến một đối tượng khác, nhưng chính đối tượng đó có thể được sửa đổi nếu nó có thể thay đổi.
Ví dụ:
final ArrayList<String> arr = new ArrayList<String>();
arr.add("hello"); // OK, the object to which arr points is mutated
arr = null; // Not OK, the reference is final and cannot be reassigned to
Như các bài viết Wikipedia đề cập, nếu bạn đang đến từ C++, bạn phải phân tách các khái niệm về const
vào final
và không thay đổi.
vì nếu tham chiếu là cuối cùng, bạn vẫn có thể thay đổi mọi thứ trong đối tượng mà tham chiếu trỏ đến. Bạn không thể thay đổi tham chiếu.
Giả sử bạn đã tuyên bố rằng Danh sách phát của tôi là cuối cùng. Bạn vẫn có thể thêm các mục mới vào myList, vì vậy trạng thái của nó KHÔNG phải là bất biến. Những gì bạn không thể làm, vì từ khóa cuối cùng, là thay đổi myList để tham khảo một danh sách khác.
Mặc dù không được khuyến nghị, Java cho phép biến cuối cùng được sửa đổi bằng cách sử dụng reflection.
Đọc phần còn lại của bài viết Wikipedia:
Để minh họa cho rằng dứt khoát không đảm bảo tính bất biến: giả sử chúng ta thay thế ba biến vị trí với một duy nhất: pos Chức thức cộng đồng; nơi pos là một đối tượng có ba thuộc tính pos.x, pos.y và pos.z. Khi đó, không thể chỉ định pos nhưng ba thuộc tính có thể, trừ khi chính chúng là chính số .
Đối với các nguyên thủy như int, double, char
v.v. hoạt động nhiều như bạn mong đợi.
private final int status = 10;
status = 20; // WONT COMPILE because status is final
- 1. Getters cho biến cuối cùng
- 2. giải thích biến cuối cùng
- 3. Biến cuối cùng tĩnh trong Java
- 4. Intellij Idea - tự động thêm từ khóa cuối cùng vào các biến được tạo
- 5. Chuyển biến cuối cùng cho các lớp ẩn danh
- 6. Biến Android cuối cùng
- 7. biến không phải lớp cuối cùng bên trong java
- 8. biến cuối cùng trong phương pháp trong Java
- 9. Phạm vi biến cục bộ cuối cùng trong java
- 10. Scala biến cuối cùng trong constructor
- 11. Thừa kế các trường cuối cùng trong Java?
- 12. Từ khóa `cuối cùng` trong PHP là gì?
- 13. tôi không thể có cả hai từ khóa trên cùng một dòng: riêng tư cuối cùng ...()?
- 14. mảng cuối cùng trong Java
- 15. Lấy từ cuối cùng của số NSString
- 16. Các lớp học cuối cùng trong Java không nên là cuối cùng hoặc ngược lại?
- 17. Các biến cục bộ Java cuối cùng được lưu ở đâu?
- 18. An toàn chủ đề nhưng nhanh chóng truy cập vào biến "cuối cùng cuối cùng"?
- 19. Gán giá trị mặc định cho biến cuối cùng trong trường hợp ngoại lệ trong Java
- 20. Java xóa chuỗi cuối cùng
- 21. Có thể truy cập các biến cục bộ cuối cùng nhanh hơn các biến lớp trong Java không?
- 22. Tuyên bố cuối cùng tĩnh công khai của một biến mẫu trong Giao diện JAVA
- 23. Chỉ đăng ký khóa sau khóa cuối cùng với jquery
- 24. Sự khác nhau giữa biến tĩnh và biến tĩnh cuối cùng trong Java
- 25. Xóa đối tượng cuối cùng của ArrayList trong Java
- 26. Java - Các biến cuối cùng có thể được khởi tạo trong khối khởi tạo tĩnh không?
- 27. Truy cập giá trị biến tĩnh cuối cùng của Java thông qua phản ánh
- 28. Tạo Hashtable là kết quả cuối cùng trong java
- 29. Java: Đọc n dòng cuối cùng của tệp HUGE
- 30. Nhà cung cấp kiên trì cho Java hỗ trợ các trường cuối cùng