2010-11-16 24 views

Trả lời

30

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.

0

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.

1

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.

3

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.

1

Đọ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ố .

0

Đố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 
Các vấn đề liên quan