Vì vậy, tôi đã nghe nói rằng nếu tôi so sánh 2 chuỗi với == thì tôi sẽ chỉ nhận được đúng trở lại nếu cả hai đều tham chiếu đến cùng một đối tượng/thể hiện. Đó là dây. Điều gì về Booleans?Không == kiểm tra tính bình đẳng hoàn toàn trong Booleans? - Java
Trả lời
Có == kiểm tra tính bình đẳng hoàn toàn trong Booleans không? - Java
Nó phụ thuộc vào việc bạn đang nói về Boolean
s (đối tượng wrapper, lưu ý vốn B
) hoặc boolean
s (nguyên thủy, lưu ý các trường hợp thấp hơn b
). Nếu bạn đang nói về Boolean
s (trình bao bọc đối tượng), giống như tất cả các đối tượng, hãy kiểm tra để biết danh tính, chứ không phải tương đương. Nếu bạn đang nói về boolean
s (nguyên thủy), nó sẽ kiểm tra tính tương đương.
Vì vậy:
Boolean a, b;
a = new Boolean(false);
b = new Boolean(false);
System.out.println("a == b? " + (a == b)); // "a == b? false", because they're not the same instance
Nhưng
boolean c, d;
c = false;
d = false;
System.out.println("c == d? " + (c == d)); // "c == d? true", because they're primitives with the same value
chuỗi Về:
Tôi đã nghe nói rằng nếu tôi so sánh 2 chuỗi với == sau đó tôi sẽ chỉ lấy lại true nếu các chuỗi giống hệt nhau và cả hai đều tham chiếu đến cùng một đối tượng/cá thể ...
Nó không thực sự là một "và": ==
sẽ chỉ kiểm tra xem hai String
biến tham khảo với cùng String
dụ. Tất nhiên, một cá thể String
chỉ có thể có một tập hợp nội dung, vì vậy nếu cả hai biến trỏ đến cùng một trường hợp, tự nhiên nội dung giống nhau ... :-) Điểm chính là ==
sẽ báo cáo false
cho khác nhauString
các trường hợp ngay cả khi chúng có cùng các ký tự trong cùng một thứ tự. Đó là lý do chúng tôi sử dụng equals
trên chúng, chứ không phải ==
. Các chuỗi có thể gây nhầm lẫn một chút vì intern
ing, cụ thể cho các chuỗi (không có giá trị tương đương cho Boolean
, mặc dù khi bạn sử dụng Boolean.valueOf(boolean)
, bạn sẽ nhận được một đối tượng được lưu trong bộ nhớ cache). Cũng lưu ý rằng Java không có các chuỗi nguyên thủy như nó nguyên thủy boolean
, int
vv
Vì vậy, nếu tôi sử dụng 'boolean' mới để tạo biến của tôi, trái ngược với' new Boolean', '==' sẽ giống như 'equals()'? – Bluefire
@Bluefire: Bạn không sử dụng 'boolean' mới (chữ thường). Bạn sử dụng 'true' hoặc' false' hoặc kết quả của phép toán so sánh. Tôi nghĩ rằng có rất ít trường hợp sử dụng trong Java hiện đại cho 'Boolean'. –
Vì vậy, để khai báo một boolean nguyên thủy, tôi có đặt một cái gì đó như 'boolean myBoolean = true'? – Bluefire
Nó phụ thuộc nếu bạn đang nói về kiểu giá trị như: int
, boolean
, long
hoặc về các loại tài liệu tham khảo: Integer
, Boolean
, Long
. các loại giá trị có thể được so sánh với ==
, các loại tham chiếu phải được so sánh với equals
.
Nếu bạn có một đối tượng sử dụng bằng, khi không bạn có thể chạy trong những thứ như thế này. (VM bộ nhớ cache cho autoboxing nguyên thủy)
public static void main(String[] args){
Boolean a = true;
Boolean b = true;
System.out.println(a == b);
a = new Boolean(true);
b = new Boolean(true);
System.out.println(a == b);
}
đầu ra là TRUE và FALSE
điều này không cải thiện câu trả lời, vui lòng chỉ thêm câu trả lời nếu nó cải thiện các câu trả lời đã gửi –
Thực ra, câu trả lời gốc thiếu ví dụ autoboxing. Tôi đi qua đoạn mã sau: Tùy chọn
- 1. Kiểm tra tính bình đẳng của các mảng trong C#
- 2. Kiểm tra tính bình đẳng trong Mục tiêu-C
- 3. Kiểm tra tính bình đẳng cho hai mảng byte
- 4. Macro C: #if kiểm tra tính bình đẳng
- 5. Kiểm tra tính bình đẳng của 2 Phần tử DOM
- 6. Kiểm tra tính bình đẳng của ba giá trị
- 7. Clojure - kiểm tra tính bình đẳng của biểu thức hàm?
- 8. Kiểm tra sự bình đẳng với NSNull
- 9. Scala bình đẳng với kiểm tra loại?
- 10. Kiểm tra bình đẳng đối tượng trong CoffeeScript?
- 11. Có an toàn để kiểm tra phao cho 0.0 bình đẳng không?
- 12. Kiểm tra đối tượng bình đẳng trong Jasmine
- 13. kiểm tra cho sự bất bình đẳng trong T-SQL
- 14. Kiểm tra sự bình đẳng trên một trường float MySQL
- 15. Kiểm tra một đôi để bình đẳng bao giờ an toàn?
- 16. Chuỗi Bash (đầu ra lệnh) kiểm tra bình đẳng
- 17. bình đẳng trong javascript
- 18. đánh giá DBNull: kiểm tra tính bình đẳng hoặc sử dụng toán tử 'is'?
- 19. Kiểm tra danh sách bình đẳng trong C# .Net không hoạt động khi sử dụng Nhibernate
- 20. Có cách nào thành ngữ để kiểm tra sự bình đẳng mảng trong Coffeescript không?
- 21. Cách kiểm tra trường hợp bình đẳng chuỗi không nhạy cảm trong xsl
- 22. JDK thi hành AbstractList :: equals() không kiểm tra danh sách bình đẳng kích thước đầu tiên
- 23. Cách kiểm tra xem tệp có "hoàn thành" (hoàn toàn được viết) bằng Java
- 24. "Thử nghiệm đẳng cấp bình đẳng" trong mục tiêu-c
- 25. Tra cứu Javascript: kiểm tra sự bình đẳng đối với đối tượng trống
- 26. tương đẳng cho bình đẳng heterogenous
- 27. kiểm tra đẳng cấp trong bash
- 28. chai kiểm tra bình đẳng mảng không hoạt động như mong đợi
- 29. Tại sao một kiểm tra null gây ra một ràng buộc bình đẳng trong F #?
- 30. Java FutureTask hoàn thành kiểm tra
Làm thế nào các dây có thể tham khảo các ví dụ tương tự và không được giống hệt nhau? – Pablo
Không, ý tôi là nếu chúng giống nhau nhưng * không * tham chiếu đến cùng một thể hiện, == trả về false. – Bluefire
Vui lòng đọc bất cứ điều gì trước khi đăng, và không bắt đầu với tôi nghe một cái gì đó ở đâu đó. – stanwise