Câu trả lời rõ ràng cho câu hỏi has already been given, nhưng đây là một cảnh báo không phải là câu trả lời trực tiếp: obj.equals
cũng có thể thất bại nếu obj là null. Vì vậy, bạn sẽ thường xuyên phải sử dụng mã như thế này:
if(mystr1 != null && mystr1.equals(mystr2))
vì đây
if(mystr1.equals(mystr2))
sẽ thất bại với một NullPointerException nếu mystr1 là null.
Đó là lý do tại sao, khi so sánh chuỗi là một hằng số, cú pháp tiếng sau thường được sử dụng:
if("ABCDEF".equals(mystr1))
hơn
if(mystr1.equals("ABCDEF"))
Vì lý do này, nhiều thư viện (như apache commons/lang) cung cấp các chức năng tiện ích kết hợp các kiểm tra này:
// this is the definition of org.apache.commons.lang.StringUtils.equals(String, String)
public static boolean equals(String str1, String str2) {
return str1 == null ? str2 == null : str1.equals(str2);
}
// this is the definition of org.apache.commons.lang.ObjectUtils.equals(Object, Object)
public static boolean equals(Object object1, Object object2) {
if (object1 == object2) {
return true;
}
if ((object1 == null) || (object2 == null)) {
return false;
}
return object1.equals(object2);
}
Sử dụng các phương pháp này thường an toàn hơn so với đồng bằng, trừ khi bạn biết chắc chắn rằng một trong hai đối tượng không phải là rỗng
Nguồn
2010-07-13 14:49:18
Tôi chắc chắn sẽ sử dụng Findbugs cho Eclipse lần thứ hai .... đã là một ơn trời cho việc bắt các loại mã hóa nhỏ này! – mikera
tất cả chúng đều tuyệt vời, đặc biệt khi được sử dụng cùng nhau trên một máy chủ tích hợp liên tục như hudson (miễn là mọi người thực sự xem kết quả :-)) –
bạn có biết liệu có bất kỳ phần mềm nào chạy trong thời gian chỉnh sửa không? chúng tôi đã chạy một vài trong số này như là một phần của bản dựng hàng đêm và tạo tệp báo cáo. tôi muốn một cái gì đó mà các lỗi/cảnh báo làm nổi bật ngay khi tôi gõ. –