CodeGym /Java Blog /무작위의 /자바 문자열은 같음()
John Squirrels
레벨 41
San Francisco

자바 문자열은 같음()

무작위의 그룹에 게시되었습니다
객체의 동등성을 비교하는 것은 가장 중요한 프로그래밍 작업 중 하나입니다. 그러나 숫자 세계에서는 모든 것이 명확함에도 불구하고 다른 데이터 유형을 비교하는 방법이 항상 명확한 것은 아닙니다. 기본 클래스인 Java Object 클래스는 비교를 위한 equals()CompareTo() 메서드를 정의합니다. String 클래스는 해당 equals() 메서드를 재정의합니다. Java String equals() 메소드는 내용에 따라 두 문자열을 비교합니다. String equals() 메서드 서명은 다음과 같습니다.
public boolean equals(Object anotherObject)
String equals() 메소드는 문자열을 지정된 객체와 비교합니다. 문자열이 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. == 비교 연산자를 사용하여 문자열을 비교하지 않는 이유가 궁금할 것입니다 . 사실 이것도 가능하지만 결과는 다소 다를 것입니다. 사실 == 연산자는 메모리의 주소를 비교합니다. 따라서 s1 == s2가 true를 반환하면 이 두 문자열은 메모리에서 동일한 주소를 갖습니다. 동시에, 같음은 문자열의 내용이 같은지 확인합니다. Java 문자열 같음() - 1두 문자열을 비교하는 예를 들어보겠습니다.
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

   }
}
이 프로그램의 출력은 다음과 같습니다.
참 거짓 참 참 거짓
여기서 무슨 일이 일어나고 있는지 자세히 살펴보겠습니다. 문자열을 생성하면 메모리의 특수 영역인 문자열 풀에 저장됩니다. 문자열은 대규모 프로그램에서 모든 개체의 상당 부분을 차지합니다. 따라서 메모리를 절약하기 위해 필요한 텍스트가 포함된 문자열이 배치되는 String Pool이 생성되었습니다. 나중에 새로 생성된 링크는 동일한 메모리 영역을 참조하므로 매번 추가 메모리를 할당할 필요가 없습니다. new 연산자 없이 문자열을 생성하는 경우, 즉 다음과 같이 작성할 때
String  myStringName = "...........................................",
또는 이와 유사한 경우 프로그램은 문자열 풀에 해당 텍스트가 포함된 문자열 이 있는지 확인합니다 . 그렇다면 새 문자열이 생성되지 않습니다. 그리고 새 링크는 해당 문자열이 이미 저장된 문자열 풀의 동일한 주소를 가리킵니다 . 그래서 우리가 프로그램에 글을 썼을 때
String myString1 = "here is my favorite string";
String myString2 = "here is my favorite string";
참조 myString1은 myString2 와 정확히 동일한 메모리 위치를 가리킵니다 . 첫 번째 명령은 필요한 텍스트를 사용하여 문자열 풀에 새 문자열을 생성했고, 두 번째 명령에서는 단순히 myString1 과 동일한 메모리 영역을 참조했습니다 . 그러나 myString4 문자열은 new 연산자를 사용하여 객체로 생성되었습니다 . 이 연산자는 객체가 생성될 때 객체에 대해 메모리에 새 영역을 할당합니다. new로 생성된 문자열
String myString1 = new String ("here is my favorite string");
String myString2 = new String ("here is my favorite string");
문자열 풀에 속하지 않지만 해당 텍스트가 문자열 풀의 동일한 문자열과 완전히 일치하더라도 별도의 개체가 됩니다. 또한 String equals() 메서드를 사용하여 문자열을 비교하면 주소가 아니라 문자열의 내용, 문자열의 문자 순서를 확인합니다. 그리고 문자열의 텍스트가 동일하다면 문자열이 어떻게 생성되었는지, 어디에 저장되었는지, String Pool인지 별도의 메모리 영역인지는 중요하지 않습니다. 이것이 바로 이 비교에서 myString1 , myString2myString4 가 동일한 이유입니다. 그런데 String equals() 메서드를 사용하면 대소문자를 구분하여 문자열을 올바르게 비교할 수 있다는 사실을 알고 계셨나요? 즉, "my string" 문자열을 "My string" 및 "MY STRING" 문자열과 비교하면 false가 됩니다.
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

   }
}
출력은 다음과 같습니다.
거짓 거짓
대소문자를 구분하지 않고 문자열을 비교하기 위해 Java에는 다음과 매우 유사한 메소드가 있습니다 .
boolean equalsIgnoreCase​(String anotherString)
우리의 예에서 그것을 사용해 봅시다.
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));

   }
}
이제 출력은 다음과 같습니다.
진짜 진짜
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION