2013-03-02 6 views
1

이 두 문장의 결과는 무엇입니까? 어떻게 작동하는지 이해하는 데 어려움을 겪고 있습니다. 저는 1 번, b = 33에 대해서 말할 것입니다. 이것은 a = a + 1을 말합니다. 그래서 a = 33입니다. b는 a와 같으므로 b도 33이어야합니다. 두 번째 것은 b = delmar라고 말할 것입니다. 일종의 혼란 스러움, 도움을 주셔서 감사합니다, 감사합니다.출력은 무엇이며 그 이유는 무엇입니까?

1

int a; 
int b; 
a = 32; 
b = a; 
a = a + 1; 
System.out.println(b); 

2 : 제 문

Person a; 
Person b; 
a = new Person("Everett"); 
b = a; 
a.changeName("Delmar"); 
System.out.println(b.getName()); 
+1

내 충고 : (1) 코드를 실행하고 어떤 일이 발생하는지 관찰하십시오. (2) 무슨 일이 일어나면 디버거에서 코드를 단계별로 실행하십시오. – NPE

+0

또한 향후 독자를 위해 가장 유용한 답을 올바른 것으로 표시하십시오. 이것은 핵심 개념입니다. – christopher

+0

Java에서 '참조'개념을 이해해야합니다. – nikhil

답변

1

처음에는 a의 값이 으로 복사 된을 b로 지정합니다. 따라서 a의 변경 사항은 b에 영향을주지 않습니다.

둘째로 ab은 동일한 개체를 나타냅니다. 따라서 a의 변경 사항은 b에 반영됩니다.

따라서 출력은 첫 번째 경우는 32이고 두 번째 경우는 Delmar입니다.

+0

감사합니다. –

2

출력 B는 객체 없기 때문이다 (32)이기 때문에, INT 변수에 대한 포인터를 나타내지 않는 객체; 실제 값을 나타냅니다.

두 번째 명령문은 "Delmar"를 출력합니다. 이것은 B와 A가 실제로 같은 객체를 가리키고, a에서 값을 변경할 때 b에서 값을 암시 적으로 변경하기 때문입니다.

0

추가 한 후 사전 측정의 경우 새 개체가 생성됩니다. 따라서 b는 32와 동일한 old a를 가리킬 것입니다.

하지만 사전 형이 아닌 Person 클래스의 경우 a와 b는 모두 같은 객체를 가리키고 있으므로 객체에 대한 변경 사항은 모두 refrence 변수로 다시 채워집니다.

관련 문제