a==b -> true
a.equlas(b) -> true
a==c -> false
a.equals(c) -> true
인스턴스의 힙메모리 저장 주소를 반환하는 메서드이다. (힙메모리에 인스턴스가 저장되는 방식이 hash)
hash: 정보를 저장, 검색하기 위해 사용하는 자료구조로, 자료의 특정 값(키 값)에 대해 저장 위치를 반환해주는 해시 함수를 사용한다.
index = hash(key)
// index는 저장위치
String, Integer 등의 클래스에서는 서로 다른 메모리의 두 인스턴스의 값이 동일하면 hashCode() 값도 동일하게 반환된다.(실제 힙메모리 주소는 다름)
String을 선언할 때 힙메모리에 인스턴스로 생성되는 경우와 상수 풀(constant pool)에 있는 주소를 참조하는 방법 두 가지가 있다. 이때 상수 풀의 문자열을 참조하면 모든 문자열이 같은 주소를 가리킨다.
String str1 = new String("abc"); //생성자의 매개변수로 문자열 생성
String str2 = "test"; //문자열 상수를 가리키는 방식
String
StringBuilder, StringBuffer
내부적으로 가변적인 char[] 배열을 가지고 있는 클래스이다. memory에 append 하는 방식으로 문자열을 변경할 수 있다. 따라서 문자열의 추가, 수정, 삭제가 빈번하게 발생할 경우라면 String 클래스가 아닌 StringBuffer/StringBuilder를 사용하는 것이 좋음.
StringBuilder
변경가능한 문자열
비동기 처리
싱글 쓰레드에서는 성능이 더 좋음
StringBuffer
컴파일 후 생성된 class 파일에서 객체의 정보(멤버변수, 메서드, 생성자 등)를 가져올 수 있다.
Class 클래스를 이용하여 클래스의 정보를 가져오고 이를 활용해서 인스턴스를 생성하고, 메서드를 호출하는 등의 프로그래밍 방식
String s = new String();
Class c = s.getClass();
Class c = String.class;
Class c = Class.forName("java.lang.String"); //클래스 이름은 패키지까지 풀네임