자바 공부 얕은복사부분 공부하는데 이해가 안가는 부분을 발견해서요...
얕은복사가 단순 필드값을 복사해서 객체를 복제하는 것이다 라고 되어있고 필드가 참조타입일경우
객체의 번지(주소)가 복사된다고 하는데요.
예제 소스코드에서 클래스를 얕은 복사하는데 필드중에 String 타입이 있습니다
String 타입은 참조타입이잖아요?
클래스를 복사후에 복사 클래스의 String 타입의 필드를 변경후
필드값을 출력해보니 원본은 그대로있고 복사객체의 필드는 변경이 되었는데요...
값이 둘다 같이 바뀌어야 되는것 아닌가요?
String s1 = "12345" // 원본 객체의 필드
여기서 "12345" 문자열의 참조값(주소값)이 s1에 저장이 되고..
객체를 복사했다면 그 객체의 s1 필드에도 "12345" 문자열의 참조값이 저장되어있어서
같은곳을 바라봐야할것같은데..
왜 각각 다른곳을 바라보나요?
String은 일반 참조형 변수랑 다름. Java String Pool에 값이 저장되고 그걸 가리키는 방식의 참조형 변수임
String Pool이라고하니 이해가 잘안가는데...아무튼 String s1 = "12345" 에서 문자열 "12345" 가 String 객체로 생성되고 변수는 이 String 객체를 참조하는 방식아닌가요? 결국 String 에는 이 주소가 들어있으니까 얕은복사에서도 결국 여기에 저장되어있는 값만 복사, 즉 주소만 복사하니까 같은곳 가르키는 그런방식아닌가여..
책에서도 name1 = new String("12345") 와 name2 = new String("12345") 는 각각 다른 String 객체를 생성하니까 서로 다르게 참조하는건 알겠는데 여기 얕은복사에서는 주소를 그대로 복사하니까 같은곳 복사하는것 아닌지..