2010-10-06 31 views
6

Tôi có hai chuỗi giống nhau, một trong một mảng và một trong một biến Chuỗi. Khi tôi so sánh các chuỗi IDENTICAL tôi nhận được sai mỗi lần. Tôi đã gỡ lỗi và sửa lỗi, nhưng tôi nhận được kết quả tương tự mỗi lần. Đây là mã được đề cập đếnSo sánh các chuỗi giống hệt cho tôi false

String temp = ""+(num1*num2); 
Boolean equal = temp == answers[i]; 

if(equal) { 
    correct[i] = true; 
    num_correct ++; 
}else{ 
    correct[i] = false; 
} 

Một lần nữa, tôi đã gỡ rối từng chi tiết nhỏ của chương trình này và tôi chắc chắn 101% rằng các chuỗi là NHẬN ĐỊNH. Tại sao Java trả về false khi so sánh?

+2

Tại sao bạn đang sử dụng một Boolean (lớp java) thay vì kiểu boolean mẹ đẻ? Ngoài ra, tại sao sử dụng toán tử == thay vì phương thức equals()? – SirDarius

+1

Chúng tôi cần danh sách 10 câu hỏi thường gặp hàng đầu, == thay vì bằng luôn xuất hiện. –

+0

@Steve Kuo Đó là một ý tưởng tuyệt vời. Nên đề xuất nó trên meta nếu nó không có. – jdmichal

Trả lời

13

Khi bạn sử dụng toán tử == trong Java với các đối tượng, bạn đang cố gắng so sánh các tham chiếu đối tượng. Tức là, đối tượng này xử lý trỏ tới đối tượng giống hệt như đối tượng kia xử lý. Trừ khi các chuỗi được thực tập, điều này sẽ không hoạt động.

Sử dụng String.equals(Object) thay vì:

Boolean equal = temp.equals(answers[i]); 
+0

Không cần sử dụng 'Boolean' thay vì' boolean'. –

+0

Chỉ cần nói nó như được tìm thấy trong OP. Nếu nó là của tôi, tôi sẽ sử dụng 'boolean' cuối cùng. – jdmichal

-5

Liệu sự giúp đỡ này?

Boolean equal = (temp == answers[i]); 

Tôi không chắc đó có phải là vấn đề hay không, nhưng tôi luôn kèm theo các điều kiện trong ngoặc đơn.

+2

-1 vì thiếu sự cố hoàn toàn –

+0

yep. Tôi hoàn toàn đã làm. – Dutchie432

4

Bạn đang so sánh tham chiếu chứ không so sánh giá trị. Khi bạn sử dụng toán tử ==, kiểm tra của nó để xem các tham chiếu có bằng nhau hay không. Nếu bạn muốn kiểm tra xem các giá trị có bằng nhau hay không bằng phương pháp equals.

boolean equal = temp.equals(answers[i]); 
1

== trong java cho chuỗi so sánh để xem chúng có cùng một đối tượng hay không, không cùng giá trị chuỗi. Bạn nên sử dụng .equals thay vào đó sẽ so sánh giá trị. == hoạt động đôi khi bởi vì các chuỗi có thể được tập trung và tham chiếu đến cùng một đối tượng thông qua tham chiếu ngay cả khi được tạo riêng biệt qua cùng một chữ (vì vậy chuỗi b = "Hey" và chuỗi c = "Hey" kết thúc là cùng một đối tượng trong nền bởi vì "Hey" đã được gửi đến một đối tượng chuỗi ẩn).

-1

Vì những người khác đã cho thấy bạn nên sử dụng equals.

Nhưng tôi cũng sẽ sử dụng booleanValue đối tượng Boolean.

Dưới đây là mã của bạn làm đúng

String temp = ""+(num1*num2); 
Boolean equal = temp.equals(answers[i]); 

if(equal.booleanValue()) { 
    correct[i] = true; 
    num_correct ++; 
}else{ 
    correct[i] = false; 
} 
+0

Ehm, tại sao lại bỏ phiếu? –

+0

Có lẽ vì sử dụng Boolean.booleanValue phức tạp hơn nhiều so với * boolean *. – DJClayworth

+0

và nó sẽ unboxed giá trị boolean nguyên thủy anyway – David

Các vấn đề liên quan