2012-04-19 29 views
31

thể trùng lặp:
String and FinalViệc xác định một Chuỗi cuối cùng trong Java có hợp lý không?

Từ http://docs.oracle.com/javase/6/docs/api/java/lang/String.html tôi có thể đọc rằng:

Strings are constant; their values cannot be changed after they are created. 

Điều này có nghĩa rằng một final String không thực sự có ý nghĩa trong Java, trong cảm giác rằng thuộc tính final là bằng cách nào đó dư thừa?

+0

Khai báo biến * * cuối cùng không liên quan gì đến đối tượng bạn đã gán cho nó. –

+0

Bản thân đối tượng '' là bất biến, nhưng tham chiếu đến nó có thể thay đổi. Làm cho nó 'cuối cùng' làm cho tham chiếu bất biến là tốt. –

+0

Cảm ơn tất cả các câu trả lời và nhận xét. Rất tiếc vì đã sao chép. – Campa

Trả lời

46

Đối tượng String là không thay đổi nhưng những gì nó thực sự là một tham chiếu đến một đối tượng String mà có thể thay đổi.

Ví dụ:

String someString = "Lala"; 

Bạn có thể gán giá trị nắm giữ bởi biến này (để làm cho nó tham chiếu đến một chuỗi khác nhau):

someString = "asdf"; 

Tuy nhiên, với điều này:

final String someString = "Lala"; 

Sau đó, việc phân công lại ở trên sẽ không thể thực hiện được và sẽ dẫn đến lỗi biên dịch.

17

final đề cập đến biến, không phải đối tượng, vì vậy, có ý nghĩa.

ví dụ:

final String s = "s"; 
s = "a"; // illegal 
5

Điều đó có ý nghĩa. Từ khóa final ngăn việc gán trong tương lai cho biến. Sau đây sẽ là lỗi trong java:

final String x = "foo"; 
x = "bar" // error on this assignment 
3

Tham chiếu cuối cùng, Đối tượng không. Bạn có thể định nghĩa một đối tượng có thể thay đổi là cuối cùng và thay đổi trạng thái của nó. Điều cuối cùng đảm bảo là tham chiếu bạn đang sử dụng không bao giờ có thể trỏ tới đối tượng khác một lần nữa.

Các vấn đề liên quan