2017-11-16 6 views
0

CODE 1정수형 변수의 경우 '='연산자가 값 또는 참조와 동일합니까?

Car car1 = new Car(); 
Car car2 = new Car(); 
car2.setColor("Green"); 
car2.setModel("I20"); 
car1 = car2; 
System.out.println(car1.getColor() + " , " + car1.getModel()); 
System.out.println(car2.getColor() + " , " + car2.getModel()); 
car1.setColor("Red"); 
car1.setModel("I10"); 
System.out.println(car1.getColor() + " , " + car1.getModel()); 
System.out.println(car2.getColor() + " , " + car2.getModel()); 

출력 : 여기 car1 = car2;

Green , I20 
Green , I20 
Red , I10 
Red , I10 

따라서 car1을 더 변화가 car2 객체로 변화와 동등한 car1 객체 car2 오브젝트를 참조 할 둘 다 같은 값을 참조합니다.

CODE 2

Integer c = 5; 
Integer d = 10; 
System.out.println(c + ", " + d); 
c = d; 
System.out.println(c + ", " + d); 
c = 7; 
System.out.println(c + ", " + d); 

출력 : c의 값을 변경하는 이유 역시 후 c = d; 모두 cd가 같은 값을 참조 여기

5, 10 
10, 10 
7, 10 

변화하지 않는다 d 값?

+0

'='변수가 아니라 객체를 수정합니다. – user2357112

+0

변수의 값을 변경하는 것은 객체의 상태를 변경하는 것과 매우 다릅니다. 우편 주소를 변경하면 이전 주소로 집을 수정할 수 없으며 아직 거주중인 다른 사람들의 주소도 변경되지 않습니다. – azurefrog

+2

@ 필자는 이유가 더 많이 '정수'변수가 참조라고 생각한다. - c = d; c = 7;'d'를'Foo d = new Foo (42) 이상 수정하지 않습니다; 푸 (Foo) c = d; c = new Foo (69);가 있습니다. –

답변

-2

java.lang.Integer는 Car보다 약간 특수한 클래스이기 때문에. Integer 클래스는 java 프리미티브 int를 래핑합니다. equals 메서드는 프리미티브 int에서 평가됩니다.

c = d를 지정하면 내부 int가 10으로 설정되지만 여전히 2 개의 내부 int가 다릅니다 (동일한 메모리를 참조하지 않음). 따라서 나중에 c에 재 할당하면 d의 값이 변경되지 않습니다.

당신은 자세한 내용은 자바 독을 읽을 수 있습니다 https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html

+1

이 코드의'= '는'equals' 메소드에 해당하지 않습니다. –

0

이 아니 당신이 반전되지 C에서 값 d를 할당하기 때문이다. 이해하십니까? d 값을 c로 지정하려면 c의 d recive 참조에 대해 d = c라고 쓰십시오.

1

정수는 변경 불가능합니다. 이것은 그것이 그렇게 변경 될 수 없다는 것을 의미합니다. 내부 필드를 변경할 수 없습니다. 그것이 가리키는 메모리의 어떤 위치로 변경할 수는 없지만 주어진 Integer의 참조에 할당 된 값을 변경할 수 있습니다. 예에서, 때 당신은 의미하지 않는다

Integer i = 5; 
Integer j = 10; 
i = j; 

이 쓰기 이제 i 메모리 j 점에서 같은 장소를 가리키는에서. j에 저장된 값은 변경 가능 유형에만 허용되므로 i에 할당합니다.