Java_문자열 비교(equals)

song·2023년 10월 19일

Java

목록 보기
26/36

"문자열" 비교

  • "문자열" 비교시 == 아니고 equals() 메서드를 써야한다.
    (문자 하나만 비교할 때는 ==써도 됨.)
    ==는 주소값비교이고, equals()는 데이터값 비교.
  • 사용법 : 문자열1.equals(문자열2)
  • ★ ==는 객체 비교 할 땐 못 씀.
    (==는 기본형 자료에 대해서만 사용 가능)
  • null 체크
    String a = null;
    String b = "asdf";
    System.out.println(a.equals(b));
    비교대상이 null일때는 오류가 뜬다. 뭐랑 비교해야 되는지 확인이 안되기 때문이다.
    하지만 System.out.println(b.equals(a)); 로 비교하면 비교대상자가 일단 있기 때문에 비교가 가능하다. false라고 결과값이 뜬다. (null을 따로 체크하는 코드를 짤 필요가 없음)
  • 문자열 할당하는 방법
    • String a = "java";
    • String b = new String("java");

    • 위 2개는 ==로 비교하면 false나옴.
    • 인스턴스를 생성하게 되면 'heap'에 저장되는데, 리터럴 값은 heap안의 String Pool이라는 곳에 값이 저장되고 new를 이용해서 인스턴스로 생성하게 되면, 'heap'에 다이렉트로 값이 저장된다.
    1. 리터럴방식을 사용하게 되면 'heap안의 string pool'에 저장되고, 만약 같은 값을 여러 변수들에 저장하면 같은 주소값을 공유.
    2. new를 이용해서 String을 생성하면 그냥 heap영역에 저장된다.
    • String 클래스의 equals()는 모든 객체의 부모 클래스인 Object에 정의되어 있는 메소드다.
  • new를 이용해서 만든 값은 무조건 같은 주소를 가지고 있는 경우가 없다. 그래서 데이터값(모양)을 비교해주는 equals를 사용해야 한다.
  • 리터럴한 값을 넣은 다른 변수들은 뭐로 비교하던 상관 없다.
profile
계속 나아가기

0개의 댓글