Student s1 = new Student(); 라는 인스턴스를 생성시켜서 this 를 사용한다면,
class SimpleBox { private int data; SimpleBox(int data) { this.data = data; } }
class Person { private int regiNum; // 주민등록 번호 private int passNum; // 여권 번호 Person(int rnum) { //1번 this(rnum, 0); } public Person(int rnum, int pnum) { //2번 this.regiNum = rnum; this.passNum = pnum; } Person(int rnum) { regiNum = rnum; passNum = 0; }
String str1 = new String("Simple String");
① new 키워드를 통해 객체 생성
String str2 = "The Best String";
② new 키워드없이 큰따옴표 만으로 생성
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는 다른 인스턴스 참조");
String str = "최초 문자열"; str = "변경된 문자열";
str 이라는 String 객체가 생성된 이후 "최초 문자열" 을 "변경된 문자열" 로 바꾼다고 해도 내부적으로는 최초 생성된 String 객체의 값이 변경되는 것이 아니라 새로운 String 객체가 생성되어 그 참조가 str 변수에 할당된 것.
String은 값을 바꾸는 것이 불가능할뿐더러 당연히 값을 바꾸는 메소드 또한 제공되지 않는다.
Java는 문자열을 표현할 때마다 생성되는 인스턴스의 수를 줄이기 위해 동일한 문자열로 구성되는 String 인스턴스의 수를 1개로 제한한다. 그리고 이를 통해 발생할 수 있는 문제를 방지하기 위해 String 인스턴스의 값 변경을 허용하지 않는다.
public static void main(String[] args) { String str1 = "Simple String"; // MA에 한번만 올라가서 공유됨 String str2 = "Simple String"; String str3 = new String("Simple String"); String str4 = new String("Simple String"); if (str1.equals(str3)) { // 문자열이 동일한지 확인 System.out.println("str1과 str3는 동일 문자열"); } else { System.out.println("str1과 str3는 다른 문자열"); }
💡equals()와 ==의 차이
String 객체에 있는 length() 와 함수와 charAt() 함수를 활용하시오.
class StringTest {
public static void main(String[] args) {
String str = "abcde";
System.out.println(str.length());
System.out.println(str.charAt(4));
for (int i = str.length()-1; i > -1 ; i--) {
System.out.print(str.charAt(i));
}
}
}
입력:abcde
출력:edcba