자기 자신의 생성자를 호출할 때 사용하는 키워드이다.
같은 클래스에서 생성자가 다른 생성자를 호출할 때 사용됩니다.
생성자가 다양해질 때(오버로딩) this()를 이용하면 중복된 코드를 간단하게 작성할 수 있다.
객체 자신을 가리키는 레퍼런스 변수로, 자신의 객체에 접근할 때 사용됩니다.
주로 멤버변수와 매개변수의 이름이 동일할 때, 이를 구분하기 위해 사용됩니다.
string str = "산업기사";
string str = new String(산업기사);
String str1 = "Simple String";
String str2 = "Simple String";
String str3 = new String("Simple String");
String str4 = new String("Simple String");
if(str1 == str2)
System.out.println("str1과 str2는 동일 인스턴스 참조");
else
System.out.println("str1과 str2는 다른 인스턴스 참조");
if(str3 == str4)
System.out.println("str3과 str4는 동일 인스턴스 참조");
else
System.out.println("str3과 str4는 다른 인스턴스 참조");
이유 : str1과 str2는 동일한 문자열을 참조하였기 때문에 동일한 메모리를 사용하는 인스턴스이고 str3와 str4는 new string으로 각자 참조하였기 때문 각자의 메모리를 사용하는 다른 인스턴스이다
new 연산자로 객체를 생성하면 heap영역에 객체가 생기고 래퍼런스 값을 가지는 변수가 stack에 생길 것이다. 불변 객체라는 것은 이 객체의 값을 heap 영역에서 바꿀 수 없다는 뜻이다.(객체에 값을 할당하면 내부 데이터를 변경시킬 수 없다.)
final을 사용하면 immutable이다.
메모리 절약, security, thread safe라는 장점이 있어서 사용
메모리 절약
String Object를 생성하면 String object를 Heap 메모리의 String Constant Pool에 할당 하고 나서 이후 String Pool에서 같은 값을 찾으면 새로 생성할 필요 없이 같은 String Object를 참조하는 방식으로 작동 합니다.(String을 immutable하게 설계 했기 때문)
security
account 변수는 참조 변수기 때문에, 해당 메서드 밖에서도 여전히 다른 thread및 메서드 등에 의해 실제 값에 대한 접근이 가능합니다.(String Object의 값을 변경하는 것을 허용 하지 않기 때문)
thread safe
수천 수만개의 Thread가 메모리상의 같은 String Object를 참조 가능합니다.(어느 Thread에서도 값을 변경 할 수 없기 때문)
String 객체에 있는 length() 와 함수와 charAt() 함수를 활용하시오.
입력:abcde
출력:edcba