"" là một chuỗi thực tế, mặc dù là một chuỗi trống. Tuy nhiên,
null, có nghĩa là biến Chuỗi trỏ đến không có gì.
a==b
trả về false vì "" và null không chiếm cùng một không gian trong bộ nhớ - nói cách khác, các biến của chúng không trỏ đến cùng một đối tượng.
a.equals(b)
trả về false vì "" không bằng 0, hiển nhiên.
Sự khác biệt là dù rằng kể từ khi "" là một chuỗi thực tế, bạn vẫn có thể gọi các phương pháp hoặc các chức năng trên đó như
a.length()
a.substring(0, 1)
và vân vân.
Nếu String bằng null, như b, Java sẽ ném một NullPointerException
nếu bạn đã cố gắng gọi, nói:
b.length()
Nếu sự khác biệt bạn đang phân vân về được == so bằng, nó này:
== so sánh tài liệu tham khảo, như thế nào nếu tôi đã đi
String a = new String("");
String b = new String("");
System.out.println(a==b);
Điều đó sẽ xuất ra sai vì tôi đã phân bổ hai đối tượng khác nhau, và một điểm a và b cho các đối tượng khác nhau.
Tuy nhiên, a.equals(b)
trong trường hợp này sẽ trở thành sự thật, bởi vì equals
cho Strings sẽ trở lại đúng if and only if the argument String is not null and represents the same sequence of characters.
Được cảnh báo, mặc dù, rằng Java không có một trường hợp đặc biệt cho Strings.
String a = "abc";
String b = "abc";
System.out.println(a==b);
Bạn sẽ nghĩ rằng đầu ra sẽ là false
, vì nó sẽ phân bổ hai Chuỗi khác nhau. Trên thực tế, Java sẽ intern Chuỗi ký tự (các chuỗi được khởi tạo như a và b trong ví dụ của chúng tôi). Vì vậy, hãy cẩn thận, bởi vì đó có thể cung cấp cho một số tích cực sai về cách == hoạt động.
So sánh với 'b.equals (a)' - nhưng không sử dụng '==' cho chuỗi so sánh là "nó sẽ không hoạt động" theo những cách khác. Giá trị 'null' (khác với một chuỗi rỗng' "" ', một thể hiện String hợp lệ) có thể * không bao giờ * có một phương thức được gọi trên nó. Đặt "không được biết" (thường là giá trị không đổi hoặc chữ) ở bên trái của bình đẳng là "Yoda có điều kiện" hoặc một số như vậy. –