Reference 부분에 대해 질문이있습니다.
클래스의 인스턴스 변수 또한 참조형이기떄문에
기존c1.name 을 c2.name 로 덮어씌우게 되면서 참조위치의 변형에 따라 c2.name을 따라 간다는것은 이해했습니다.
camera c1= new camera();
camera c2=new camera(); //c2는 어딘가 만들어진것을 참조만 하고있는것임
c1.name="카메라1"; c2.name="카메라2";
c2=c1; //원래 기존에 다른 참조를 하고있던것 -> c2에 c1을 넣는다 뒤에
c2.name="고장난카메라";
그러면 String변수의 경우에도 참조형변수라고 알고있는데
String hel = "안녕하세요"; String helo2 = "안녕하세요2";
hel=helo2;// hel="change";
이런식으로 진행했을때 클래스 인스턴스 변수처럼 따라오지가 않는데 왜 그런건가요?
답변 1
0
안녕하세요?
작성해주신 예제에서 hel 이라는 string 변수를 만들게 되면 메모리 공간에 "안녕하세요" 라는 글자가 저장되고 그곳을 가리키게 됩니다. helo2 변수의 경우 메모리 공간에 "안녕하세요2" 라는 글자가 저장되고 그곳을 가리키게 됩니다.
이 때 다음과 같이 하게 되면 hel 변수는 helo2 변수가 가리키는 "안녕하세요2" 를 가리키게 되지요.
hel = helo2;그런데 hel 에 새로운 문자열을 대입하게 되면 기존 "안녕하세요2" 위치의 값이 수정되는게 아니라 새로운 메모리 공간에 "change" 라는 글자가 저장되고 그곳을 가리키게 됩니다. 그래서 helo2 는 그대로 "안녕하세요2" 를, hel 은 "change" 를 각각 가리키게 되는 것입니다.
String hel = "안녕하세요";
String helo2 = "안녕하세요2";
hel = helo2;
System.out.println(hel + " / " + helo2); // 안녕하세요2 / 안녕하세요2
hel = "change";
System.out.println(hel + " / " + helo2); // change / 안녕하세요2참고로 다음과 같이 2개의 동일한 문자열 변수를 만들게 되면 메모리 공간에는 "안녕" 이라는 글자가 한 번만 저장되고 2개의 변수가 각각 이를 가리키게 됩니다.
String s1 = "안녕";
String s2 = "안녕";
System.out.println(s1 == s2); // trueCamera 예제에서는 c1 과 c2 객체가 각각 생성된 상태에서 c2 = c1; 을 통해 c2 는 c1 이 가리키는 곳을 함께 참조하게 됩니다. 그러므로 c1.name 또는 c2.name 의 값을 바꾸게 되면 name 변수는 새로운 메모리 공간에 저장된 "고장난 카메라" 를 가리키게 되지만, c1 이나 c2 나 결국 같은 위치를 참조하게 되며 같은 객체의 name 변수이기 때문에 println 문을 통해 출력 시 c1.name 과 c2.name 모두 같은 값이 출력되는 것입니다.
도움되셨으면 합니다 😊
감사합니다.
자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?
1
148
2
static이 뭐였는지 기억이 안나요 ㅜㅜ
0
120
2
Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의
0
73
1
사고력 키우는 법이 어떤게 있나요?
0
94
2
getter setter
0
103
2
섹션9. 66 메소드 오버로딩 시 질문이 있습니다.
0
80
1
안녕하세요 갑자기 프로그램 에러가 떠서 안되네요
0
77
2
변수 이름짓는법
0
114
2
intelli J 실행오류
0
115
2
혹시 이건 수학적 사고가 부족한 걸까요?
0
152
2
영상이 재생이 안됩니다.
0
167
3
이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.
0
118
2
응용이 어렵습니다.
0
207
2
IntelliJ가 보이지 않습니다.
0
187
3
JDK 버전 문의
0
130
2
BlackBox 파일 내에서 메소드 정의
0
137
1
동기화
0
123
2
Iterator 문의
0
105
1
코드 순서 문의
0
143
1
클래스 메소드
0
150
2
Quiz_05 관련 질문드립니다 !
0
118
2
다운로드가 안됩니다
0
165
2
다형성
0
120
2
HashMap
0
82
2





