chênh lệch giữa trong những điều khoản sau đâyChuỗi và Final
String name = "Tiger";
final String name ="Tiger";
Mặc dù lớp String
là final
lớp, tại sao chúng ta cần phải tạo ra một chuỗi biến "CONSTANT" như cuối cùng là gì?
chênh lệch giữa trong những điều khoản sau đâyChuỗi và Final
String name = "Tiger";
final String name ="Tiger";
Mặc dù lớp String
là final
lớp, tại sao chúng ta cần phải tạo ra một chuỗi biến "CONSTANT" như cuối cùng là gì?
final
trong ngữ cảnh này có nghĩa là biến name
chỉ có thể được chỉ định một lần. Gán một đối tượng khác nhau String
cho nó một lần nữa dẫn đến một lỗi biên dịch.
Tôi nghĩ rằng nguồn gốc của sự nhầm lẫn ở đây là từ khóa final
thể được sử dụng trong những bối cảnh khác nhau:
Xem bài viết trên Wikipedia số final in Java để biết ví dụ về từng trường hợp.
Hãy nhớ 'cuối cùng' cũng là về xuất bản an toàn cho các chủ đề khác, mặc dù (xem câu trả lời của tôi dưới đây). –
Bạn đang bối rối bất biến với kết quả cuối cùng.
Chuỗi, như Integer và Long, là một lớp không thay đổi trong đó dữ liệu nội bộ được bảo vệ khỏi sửa đổi thông qua đóng gói.
Tuy nhiên, như Ayman đã nói, cuối cùng đề cập đến con trỏ tới chuỗi.
Hãy nhớ rằng Java final keyword phục vụ hai mục đích trong trường hợp này:
Yup, ngữ nghĩa cuối cùng là rất quan trọng trong các ứng dụng đồng thời, không phải như vậy trong các ứng dụng Java bình thường, bởi vì các lập trình viên Java có xu hướng nắm lấy sự biến đổi. – egaga
"cuối cùng "có nghĩa là những thứ khác nhau trong hai trường hợp.
lớp java.lang.String là cuối cùng. điều này có nghĩa bạn không thể kế thừa từ nó.
biến 'tên' là cuối cùng, có nghĩa là bạn có thể' t thay đổi nó để trỏ đến một thể hiện khác của String. không phải là một hằng số, bởi vì bạn có thể đọc nó ở hai thời điểm khác nhau và nhận được các giá trị khác nhau.
Khi điều đó xảy ra, các đối tượng chuỗi Java cũng không thay đổi. Điều này có nghĩa rằng bạn không thể sửa đổi giá trị mà một đối tượng String cụ thể đại diện. So sánh điều này với một mảng - bạn có thể thay thế phần tử đầu tiên của đối tượng mảng bằng một đối tượng khác, nhưng bạn không thể thay thế ký tự đầu tiên của đối tượng String bằng một char khác. Đây là lý do tại sao String.replace() trả về một chuỗi mới - nó không thể sửa đổi chuỗi cũ.
Một lý do mà String là cuối cùng là ngăn chặn một thể hiện của một lớp con của String, thực hiện hành vi có thể thay đổi, được truyền vào vị trí của một String.
Nhưng cho dù bạn có thể sửa đổi một đối tượng cụ thể và liệu bạn có thể gán một đối tượng khác cho một biến hay không, đó là các khái niệm hoàn toàn khác nhau. Một là thuộc tính của các đối tượng String và thuộc tính kia là thuộc tính của các biến String, là các tham chiếu đến các đối tượng String.
Hãy xem The final word on the final keyword.
String name = "scott";
name = "tiger"; // OK
final String gender = "male";
gender = "female"; // won't compile you cannot reassign gender cause it's final
Nếu một biến được đánh dấu là thức thì giá trị của biến mà không thể thay đổi tức là từ khóa cuối cùng khi sử dụng với một biến làm cho nó một hằng số. Và nếu bạn cố gắng thay đổi giá trị của biến đó trong suốt quá trình của chương trình, trình biên dịch sẽ cung cấp cho bạn một lỗi.
LƯU Ý: Nếu bạn đánh dấu biến của loại tham chiếu là cuối cùng, biến đó không thể tham chiếu đến bất kỳ đối tượng nào khác. Tuy nhiên, bạn có thể thay đổi nội dung của đối tượng, bởi vì chỉ tham chiếu chính nó là cuối cùng.
NGUỒN: Final Keyword in Java
Đó là tham chiếu đến chuỗi được làm thức ở đây, không phải là chuỗi riêng của mình. –