-인스턴스 정보를 문자열로 반환하는 메서드(클래스이름,주소값)
-string 과 integer은 각각 문자열값, 정수값이 출력 된다
-재정의 가능
-두인스턴스의 주소값 을 비교(내용 x) (true/false)
-물리적 동일성(주소비교) 뿐 아니라 논리적 동일성(내용비교)을 구현할 때도 equals() 를 재정의하여 사용한다.
-== 단순히 주소값 비교
-string 과 integer은 각각 문자열값, 정수값 비교
equals 논리적 비교 재정의
@Override
public boolean equals(Object obj){
if(obj instanceof Student)
Student std=(Student)obj;
if(this.studentId==std.studentId)
else return true;
}
return false;
}
두 인스턴스가 같다면 hashcode() 메서드에서 반환하는 해시 코드 값이 같아야한다.
논리적으(내용)으로 같은 두 객체도 같은 해쉬코드값을 반환하도록 hashcode() 메서드도 재정의 해야한다(명목상 hashcode 이지 실제주소는 따로 있다.)
equals() 매서드를 재정의 했다면 hashcode() 도 재정의 해야함
string 과 integer은 각각 같은 데이터가 들어있으면 같은 해시코드, integer는 그냥 정수값 반환.
재정의 할떄 equals() 에서 사용한 맴버변수를 활용
실제 인스턴스주소는 = System.indentityHashCode()
클래스의 인스턴스 새로 복제/다른 메모리
protected Object clone();
@Override
public Object clone() throws CloneNotSupportedException{
retrun super.clone();
}
클론을 사용하려면 객체를 복제해도 된다는 의미로 메인클래스에 Cloneable 인터페이스를 구현해야한다.
object 의 clone() 그대로 사용/
배열도 객체 이기때문에 object클래스 사용 가능
stringBuffer
-문자열 안전하게 변경보장(두 스레드가 동시에 변경할때 문자열 안전 하게 변경보장(=스레드 동기화의 안전성)
stringBuilder
-문자열 안전하게 변경보장 x
오토박싱= 기본형을 객체형으로
언박싱 = 객체형을 기본형으로
동적로딩 = 대부분 클래스 정보는 프로그램이 로딩될떄 이미 메모리에 있다./ 프로그램 실행 이후 클래스의 로딩이 필요한 경우 클래스의 동적로딩 방식 사용(class.forName())
Stinrg str1="Abc"
String st3=new String("Abc")
-문자열 리터럴은 이미 존재하는것 재사용한다
-문자열 리터럴은 컴파일시 클래스 파일 에 저장된다
-클래스 파일이 클래스 로더에 의해 메모리에 올라갈때 이때 리터럴들이 상수풀로 이동
join(a.b) = a구분자로 구분해서 b를 결합 <-> split(구분자)