728x90
안녕하세요.
요즘 Java를 열심히 공부하고 있습니다.
공부하면서 String 클래스를 이번 기회에 정확히 공부하고 공유해보고자 이번 포스트를 작성합니다.
1. Object클래스의 equals()메서드와 String 클래스의 equals()메서드는 다른 기능을 하고 있습니다.
Object.equals() | String.equals() |
- 참조하는 주소를 비교합니다. - 아래의 코드는 Obejct클래스에 정의된 equals()메서드입니다. - "==" 비교연산자로 주소를 비교하고 있습니다. |
- 변수 값을 비교합니다. - 아래의 코드는 String 클래스에 정의된 Object 클래스의 equals()메서드를 오버라이딩해서 재정의를 하였습니다. - value로 값을 비교하고 있음을 정의하고 있습니다. |
2. String과 StringBuffer의 차이점
String 클래스 | StringBuffer클래스 |
- 한번 선언한 값은 변경할 수 없습니다. - String a = "a"라고 하면 String 인스턴스가 생성되는 것이며, 빈 메모리주소에 "a"라는 값을 가지는 메모리 영역이 생긴다. - 만약 String a ="b"라고 한다면, 참조변수 a가 참조하는 "a"의 값을 가지는 메모리주소에 "b"값을 덮어쓰우는 것이 아니라, 새로운 인스턴스가 생성되어서 새로운 빈 메모리영역에 "b"값이 저장됩니다. - String a = a +"b"를 해도 마찬가지로 새로운 인스턴스로 생성된다. - 문자열 연산이 많이 필요한 경우 그만큼 메모리 사용량이 늘어나기 때문에 정적인 값을 가지는 데이터에만 사용할 것이 권장됩니다. |
- String 클래스와 달리, StringBuffer 클래스는 선언된 문자를 수정해도 동일한 주소의 문자가 수정됩니다. |
3. String 클래스를 선언하는 방법
- 문자열 리터럴을 지정하는 방법
String a = "a"
String b = "a"
System.out.println(a == b) //true
System.out.println(a.equals(b)); //true
a,b 참조변수는 같은 주소를 참조하게 됨
동일한 값을 가지는 문자열이면, 하나의 인스턴스만 생성됩니다.
- String 인스턴스를 생성하는 방법
String a = new String("a");
String b = new String("a");
System.out.println(a == b); //false
System.out.println(a.equals(b)); //true
a, b 참조변수는 각자 다른 주소를 참조하게 됩니다.
728x90
댓글