CodeGym /Blog Java /Ngẫu nhiên /Chuỗi Java bằng()

Chuỗi Java bằng()

Xuất bản trong nhóm
So sánh các đối tượng để tìm sự tương đương là một trong những hoạt động lập trình quan trọng nhất. Tuy nhiên, đối với tất cả sự rõ ràng của nó trong thế giới số, không phải lúc nào cũng rõ ràng về cách so sánh các loại dữ liệu khác. Lớp Đối tượng Java , một lớp cơ bản, định nghĩa các phương thức bằng()so sánhTo() để so sánh. Lớp chuỗi ghi đè phương thức bằng() của nó . Phương thức Java String Equals() so sánh hai chuỗi theo nội dung của chúng. Chữ ký phương thức chuỗi bằng() trông như thế này:
public boolean equals(Object anotherObject)
Phương thức chuỗi bằng() so sánh chuỗi với đối tượng đã chỉ định. Nếu các chuỗi bằng nhau thì trả về true, nếu không thì trả về false. Bạn có thể thắc mắc tại sao không so sánh các chuỗi bằng toán tử so sánh == ? Trên thực tế, điều này cũng có thể xảy ra, nhưng kết quả sẽ hơi khác một chút. Thực tế là toán tử == so sánh các địa chỉ trong bộ nhớ. Vì vậy, nếu s1 == s2 trả về true thì hai chuỗi này có cùng địa chỉ trong bộ nhớ. Đồng thời, bằng kiểm tra nội dung của chuỗi xem có bằng nhau không . Chuỗi Java bằng() - 1Hãy lấy một ví dụ về so sánh hai chuỗi.
public class StringEqualsTest {
   //program to test Java equals() method
   public static void main(String[] args) {
       String myString1 = "here is my favorite string";
       String myString2 = "here is my favorite string"; //this string is the same as the previous one, at least we think so
       String myString3 = "here is My favorite string"; //this string looks a little bit like previous two, but the first letter is big M instead of small m
       String myString4 = new String("here is my favorite string");
//here we create a String in an object manner… Why? Find out soon
       String myString5 = "equals to myString1? No, not at all..."; //here we have absolutely different string. Just for fun
    //let’s compare myString1 with myString2 using “==” operator
       System.out.println(myString1 == myString2); //true
    //let’s compare myString1 with myString4 using “==” operator
       System.out.println(myString1 == myString4); //false
//and now we are going to use equals() method to compare myString1 with myString4, myString2 and myString5
     System.out.println(myString1.equals(myString4));//true
       System.out.println(myString1.equals(myString2));//true
       System.out.println(myString1.equals(myString5)); //false

   }
}
Đầu ra của chương trình này là:
ĐÚNG VẬY SAI ĐÚNG VẬY ĐÚNG VẬY SAI
Chúng ta hãy xem xét kỹ hơn những gì đang xảy ra ở đây. Khi chúng ta tạo một chuỗi, nó sẽ được đặt trong nhóm chuỗi, một vùng bộ nhớ đặc biệt. Chuỗi chiếm một phần rất lớn trong tất cả các đối tượng trong bất kỳ chương trình lớn nào. Vì vậy, để tiết kiệm bộ nhớ, String Pool đã được tạo, trong đó một chuỗi có văn bản bạn cần được đặt. Các liên kết mới được tạo sau này sẽ tham chiếu đến cùng một vùng bộ nhớ, không cần cấp phát thêm bộ nhớ mỗi lần. Nếu bạn tạo một chuỗi không có toán tử mới, nghĩa là khi bạn viết
String  myStringName = "...........................................",
hoặc điều gì đó tương tự, chương trình sẽ kiểm tra xem có Chuỗi nào có văn bản như vậy trong nhóm Chuỗi hay không. Nếu đúng như vậy thì sẽ không có Chuỗi mới nào được tạo. Và liên kết mới sẽ trỏ đến cùng một địa chỉ trong Nhóm Chuỗi nơi Chuỗi đó đã được lưu trữ. Vì vậy khi chúng ta viết chương trình
String myString1 = "here is my favorite string";
String myString2 = "here is my favorite string";
tham chiếu myString1 trỏ đến cùng một vị trí trong bộ nhớ với myString2 . Lệnh đầu tiên đã tạo một chuỗi mới trong Nhóm chuỗi với văn bản chúng ta cần và khi đến chuỗi thứ hai, nó chỉ đơn giản đề cập đến cùng một vùng bộ nhớ như myString1 . Nhưng chuỗi myString4 được tạo dưới dạng đối tượng bằng toán tử mới . Toán tử này phân bổ một vùng mới trong bộ nhớ cho một đối tượng khi nó được tạo. Một chuỗi được tạo bằng new
String myString1 = new String ("here is my favorite string");
String myString2 = new String ("here is my favorite string");
không rơi vào Chuỗi Chuỗi mà trở thành một đối tượng riêng biệt, ngay cả khi văn bản của nó hoàn toàn khớp với cùng một chuỗi từ Chuỗi Chuỗi. Hơn nữa, nếu chúng ta so sánh các chuỗi bằng phương thức String Equals() , nó sẽ không kiểm tra địa chỉ mà kiểm tra nội dung của chuỗi, thứ tự các ký tự trong chuỗi. Và nếu văn bản trong các chuỗi giống nhau, thì chúng được tạo ra như thế nào và chúng được lưu trữ ở đâu, trong String Pool hay trong một vùng bộ nhớ riêng không quan trọng. Đó là lý do tại sao myString1 , myString2myString4 bằng nhau trong so sánh này. Nhân tiện, bạn có nhận thấy rằng phương thức String Equals() cho phép bạn so sánh chính xác các chuỗi theo cách phân biệt chữ hoa chữ thường không? Nghĩa là, nếu chúng ta so sánh chuỗi "chuỗi của tôi" với chuỗi "Chuỗi của tôi" và "CHUỖI CỦA TÔI" thì chúng ta sẽ nhận được kết quả sai.
public class StringEqualsTest {

   public static void main(String[] args) {

       String myString1 = new String ("here is my favorite string");
       String myString2 = new String ("here is My favorite string");
       String myString3 = new String("HERE IS MY FAVORITE STRING");

       System.out.println(myString1.equals(myString2)); //false because first string myString1 has small m and myString2 has big M instead
       System.out.println(myString1.equals(myString3));//false because myString1 is in lowercase while myString3 is in uppercase

   }
}
Đầu ra ở đây:
sai sai
Để so sánh các chuỗi theo cách không phân biệt chữ hoa chữ thường, Java có một phương thức rất giống với Equals :
boolean equalsIgnoreCase​(String anotherString)
Hãy sử dụng nó trong ví dụ của chúng tôi.
public class StringEqualsTest {

   public static void main(String[] args) {

       String myString1 = new String ("here is my favorite string");
       String myString2 = new String ("here is My favorite string");
       String myString3 = new String("HERE IS MY FAVORITE STRING");
     /* here we are going to use the brother of equals() method, equalsIgnoreCase(). It can help to check user input when case isn’t
important */
       System.out.println(myString1.equalsIgnoreCase(myString2));

       System.out.println(myString1.equalsIgnoreCase(myString3));

   }
}
Bây giờ đầu ra là:
ĐÚNG VẬY ĐÚNG VẬY
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION