trường hợp của bạn là tương đương với
String str;
str = (str = "hello");
Mặc dù nhiệm vụ là buồn cười, không có gì sai khái niệm là.
Tuy nhiên, việc khởi tạo biến tham chiếu chính nó rõ ràng không phải là một ý tưởng hay. Trình biên dịch sẽ cố gắng gắn cờ nó trong các tình huống rất có thể là lỗi lập trình; trình biên dịch không làm như vậy một số lần; và cũng có thể đi quá nhiều lần khác.
Biến cục bộ có yêu cầu khắt khe hơn (biến trường) - nó phải được gán trước trước khi giá trị của nó được sử dụng. Ví dụ, điều này sẽ không biên dịch, vì var cục bộ được đọc trước khi nó được gán.
String str; // local variable
str = str; // error, try to read `str` before it's assigned
Biến trường luôn có giá trị ban đầu mặc định; tuy nhiên, việc kiểm tra trình biên dịch cho những sai lầm programer rõ ràng
int x = x+1; // error. x is field variable.
Nhưng nó không phải là thảm họa nếu việc kiểm tra như vậy thất bại, kể từ x
có một giá trị 0
trước khi phân công rõ ràng
int x;
{ x=x+1; } // ok. x==0, then x==1 after assignment
Tuy nhiên, nếu x
là final
, mã ở trên không thành công, vì trình biên dịch yêu cầu gán rõ ràng x
trước khi đọc x
, cùng yêu cầu cho một biến cục bộ. Nhưng việc kiểm tra này có thể được phá vỡ, bởi vì nó không thể phân tích và ngăn chặn nó đầy đủ cho các biến lĩnh vực
final int x = (this).x+1; // compiles!
Trong một số trường hợp, trình biên dịch đi xuống biển, ngăn chặn các trường hợp sử dụng hợp pháp liên quan đến lambda
Runnable r1 =()->System.out.println(r1); // r1 is a field variable
Không có gì khái niệm có vấn đề trong trường hợp sử dụng này; nó có thể bị phá vỡ bởi (this).
.
(str = "hello") trả về chuỗi "hello". Eclipse không khuyến khích nó với thông điệp: "Việc gán cho biến str không có hiệu lực" – LeTex
@LeTex Tôi thường đặt Eclipse chặt chẽ hơn và báo cáo chúng dưới dạng lỗi hơn là cảnh báo. Tôi không thấy lý do gì để bất cứ ai sử dụng các cấu trúc như thế này mặc dù chúng được JLS cho phép. – biziclop
Một trong những câu hỏi thú vị mà bạn đang suy nghĩ "ai đang viết mã như thế này và tại sao". Hoàn toàn học tập, chắc chắn? – TEK