2010-04-24 12 views
14

Tôi gặp vấn đề mà tôi khá bối rối. Tôi có dòng mã sau đây trong ứng dụng Android của tôi:Chuỗi dường như không bằng nhau trong Java trên Android, mặc dù chúng in giống nhau

System.out.println(CurrentNode.getNodeName().toString()); 
if (CurrentNode.getNodeName().toString() == "start") { 
    System.out.println("Yes it does!"); 
} else { 
    System.out.println("No it doesnt"); 
} 

Khi tôi nhìn vào kết quả của báo cáo kết quả println đầu tiên nó xuất hiện trong LogCat như "bắt đầu" (không có dấu ngoặc kép rõ ràng). Nhưng sau đó khi câu lệnh if thực thi nó đi đến câu lệnh khác và in "No it doesn't".

Tôi tự hỏi nếu tên của nút có thể có một số loại ký tự không in trong đó, vì vậy tôi đã kiểm tra độ dài của chuỗi đến từ getNodeName() và dài 5 ký tự, như bạn mong đợi .

Có ai có ý tưởng gì đang xảy ra ở đây không?

Trả lời

44

Sử dụng phương pháp equals của String để so sánh Chuỗi. Toán tử == sẽ chỉ so sánh các tham chiếu đối tượng.

if (CurrentNode.getNodeName().toString().equals("start")) { 
    ... 
+0

Điều gì sẽ là kết quả của 'CurrentNode.getNodeName(). ToString(). Equals (" start ") ==" start ".equals (CurrentNode.getNodeName(). ToString()'? –

+0

@MohammedShareefC I ' d mong đợi 'đúng', nhưng bạn có thể kiểm tra nó để tìm hiểu –

+0

yup Xin lỗi vì đã quá lười biếng –

7

Bạn cần phải sử dụng Equals

if ("start".equals(CurrentNode.getNodeName().toString()) { ... } 
13

Sử dụng CurrentNode.getNodeName().toString().equals("start").

Trong Java, một trong những lỗi phổ biến nhất mà người mới gặp gặp là sử dụng == để so sánh Chuỗi. Bạn phải nhớ, == so sánh đối tượng nhận dạng (Hãy suy nghĩ địa chỉ bộ nhớ), chứ không phải nội dung .

+0

cảm ơn rất nhiều cho lời giải thích này .. Tôi lãng phí giờ quý giá tự hỏi tại sao heck == không hoạt động – imin