Language/JAVA

(JAVA)String 비교

doheun 2023. 1. 13. 13:06
반응형

String 비교 ( == , equals)

== (주소를 비교)
equals (해시코드로 비교)

문자열이 같으면 해시코드가 같고 주소값은 다르다

리터럴

  • String pool에 생성
//리터럴과 리터럴

String s1="java";

String s2="java";

System.out.println(s1==s2);//true

System.out.println(s1.equals(s2));//true

객체

  • String pool이 아닌 heap에 생성

//객체와 객체

String obj1=new String("c++");

String obj2=new String("c++");

System.out.println(obj1==obj2);//false

System.out.println(obj1.equals(obj2));//true

==(주소는 각각 다르고)// false

equals(해시코드는 같다) //true

리터럴과 객체 비교

  • 같은 문자열을 리터럴과 객체로 생성 했을 때 객체는 String pool의 주소값을 가져와 문자열을 저장하는데

이때는 주소가 다르고 해시코드가 같다


//리터럴과 객체

String s3="python";

String obj3=new String("python");

System.out.println(s3==obj3);//false

System.out.println(s3.equals(obj3));//true

==(주소는 각각 다르고)// false

equals(해시코드는 같다) //true

String 비교할 때 헷갈리면 그냥 equals로 비교해서 쓰면된다....

String의 타입에 따른 저장 영역

String Buffer

toString을 이용하여 문자열 형식으로 만든 후에 출력

리터럴로 문자열을 저장 시 String Pool이라는 공간에 저장이 된다.
하지만 이 리터럴이 수시로 값이 변하게 되면 String pool에서 새롭게 저장이 되기 때문에 공간의 낭비가 발생하게 된다.

하지만, 객체를 생성하여 heap영역에서 값이 수시로 변하게 되면 새롭게 저장되는 것이 아니고 값만 변경되기 때문에 효율적으로 사용할 수 있다. 이러한 경우에는 StringBuffer를 이용해 heap에 저장하여 메모리 낭비를 방지할 수 있다.

빠른작업 -> StringBuffer

안정성 -> StringBuilder

반응형

'Language > JAVA' 카테고리의 다른 글

(JAVA)배열  (0) 2023.01.16
(JAVA)String 메서드(문자열 자르기)  (0) 2023.01.13
(JAVA)final 예약어  (0) 2023.01.12
(JAVA)클래스 관련 용어  (0) 2023.01.11
(JAVA)아스키코드와 유니코드  (0) 2023.01.10