dân, bạn đang quên rằng quá trình đặt chuỗi chữ trong hồ bơi được gọi là "thực tập". Lớp String có một phương thức gọi là intern(). Phương pháp này đặt bất kỳ chuỗi vào hồ bơi, ngay cả khi nó không phải là trong hồ bơi ban đầu (không phải chữ). Điều này có nghĩa là mã như sau:
String a = "hello";
String b = new String("hello");
b = b.intern();
System.out.println(a == b);
sẽ in "true
". Bây giờ, tại sao một người nào đó cần điều này? Như bạn có thể tưởng tượng, so sánh chuỗi a.equals(b)
có thể mất nhiều thời gian nếu các chuỗi có cùng độ dài nhưng khác nhau gần cuối. (Chỉ cần nhìn vào mã nguồn .equals().).
Tuy nhiên, việc so sánh các tham chiếu trực tiếp giống như so sánh các số nguyên (con trỏ trong C nói), gần như ngay lập tức.
Vì vậy, điều này cung cấp cho bạn điều gì? Tốc độ. Nếu bạn phải so sánh cùng một chuỗi nhiều, nhiều lần, hiệu suất chương trình của bạn sẽ được hưởng lợi rất nhiều nếu bạn thực hiện các chuỗi này. Tuy nhiên, nếu bạn sẽ so sánh các chuỗi chỉ một lần, sẽ không có hiệu năng đạt được khi quá trình interning tự sử dụng equals().
Tôi hy vọng điều này sẽ giải thích điều này.
cảm ơn
bạn có chắc là bạn đã sử dụng '==' hoặc '=' ?? –
Đã thay đổi ví dụ về mã, xin lỗi – Eugene
Hãy chắc chắn nói ngôn ngữ là JAVA. Các ngôn ngữ khác sẽ có triển khai khác. Dù toán tử == bị quá tải để làm cho .net. – CodingBarfield