java의 ==
연산자는 두 객체가 동일한 메모리 위치에 있는지 검사합니다. 복용량이 의미하는 경우 object1 != object2
다음 object1
obejct2
와 연결되어 있지 않습니다? 연결된 경우 즉, object1
이 변경되면 obejct2
도 변경됩니다.Java에서의 동일성
답변
== 두 개의 참조이 동일한 지 확인합니다.
즉, 검사 결과가 true이면 이고 하나는입니다.
false를 반환하면 두 개의 개체가 있습니다.
물론 코드를 작성할 수있는 곳은 a! = b; 그러나 a.foo()는 b에 영향을줍니다.
처럼 :
class Bar {
private static int counter = 0;
void foo() { counter++ };
int getCounter() { return counter; }
당신이 지금 가지고있는 경우 : 본 뒤
Bar a = new Bar();
Bar b = new Bar();
A = B; 하지만 여전히, 당신이 할 때
System.out.println(b.getCounter());
a.foo();
System.out.println(b.getCounter());
는 0을 출력합니다 다음 1
그래서 본질적으로, 두 번째 질문에 대한 답은 다음과 같습니다! A = B는 하지는 "뭔가를하고 있다는 것을 의미 않습니다 A는 "B 아무것도하지 않는다"
그러나 레코드 - 마지막 문장 정적 좋은 OO 디자인의 이상으로 볼 수있는 이유가 있음;. 정확히 같은 "이상한"부작용
.편집하면 "컨테이너 및 복제와 어떻게됩니까?" ! 당신은 같은 것을 가지고 물론
, 그런 다음
List<WhatEver> a = some list containing one object "X"
List<WhatEver> b = a "clone" of a
A = B를; 하지만 물론; b.get (0) ...에 영향을 미치는 a.get (0) .foo()를 호출 할 때 ... 내부적으로 같은 목록을 가리키고 있기 때문에 X
다음과 같이 표시됩니다.이 경우 a.equals (b)는 을 반환합니다.; 반면 a == b는 거짓입니다.
두 개의 포인터가 같은지 확인합니다. 그들은 같은 대상을 가리킨다.
처음에 - 및 object2
은 개체 자체가 아니며 개체가 null 인 경우를 제외하고 개체를 참조하는 변수입니다. 따라서 ==
은 두 객체가 같은 메모리 위치에 있는지 확인하지 않지만 (두 가지 객체가 같은 객체를 참조하는지 여부를 확인합니다) 따라서 object1! = object2 인 경우 두 변수는 동일한 객체에 대한 참조를 포함하지 않습니다.당신은 이름과 나이 인간의 인스턴스를 만들 때, 등호를 오버라이드 (override) 할 경우에 나는 예제를 통해 쉽게 이해할 수있을 거라고 생각
가 가장 좋은 예 이럴이며, 방법은 동일 읽
- John (John)이 John과 같은 경우 두 사람이 동일 함 (John의 클론)
- 전달 된 객체가 사람이 아니라면 false를 반환하면 서로 다릅니다 (예 : 알고있는 개)
다음 사람이 동일하면 필드별로 필드를 확인하십시오. 비록 다른 인간이라 할지라도 같은 나이의 다른 요한이 되십시오.
public class Human { private final String name; private final int age; public Human(String name, int age) { this.name = name; this.age = age; } public String getName() { return this.name; } public int getAge() { return this.age; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof Human)) { return false; } Human that = (Human) o; if (this.age != that.age) return false; return this.name != null ? this.name.equals(that.name) : that.name == null; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + age; return result; } }
- 1. Java에서의 참조
- 2. Java에서의 작업 비용
- 3. Cards Java에서의 레이아웃 Swing
- 4. Java에서의 적절한 오류 처리
- 5. Java에서의 명사 유형 결정
- 6. Java에서의 자체 인스턴스화
- 7. Java에서의 벡터 동기화
- 8. Java에서의 PCA 구현
- 9. 로케일 Java에서의 위험 setDefault()
- 10. JAVA에서의 Long 폴링 Jquery?
- 11. Java에서의 스레드 명확화
- 12. Java에서의 NFA 시뮬레이션
- 13. Java에서의 Arrays.asList() 구현
- 14. Java에서의 IVR 개발
- 15. Java에서의 원자 대기 구현
- 16. Java에서의 동적 XML 작성
- 17. Java에서의 RFID 오류
- 18. Java에서의 스레드 동작
- 19. Java에서의 강제 다운 캐스팅
- 20. Java에서의 Hashtable 및 사용
- 21. Java에서의 날짜 연산은 무엇입니까?
- 22. java에서의 캐스팅, request.getParameter
- 23. Java에서의 위임 자동화
- 24. Java에서의 XSD 디자인 문제
- 25. Java에서의 동적 클래스 생성
- 26. Java에서의 KDTree 구현
- 27. Java에서의 XML 처리
- 28. Java에서의 부동 소수점 캐스팅
- 29. Java에서의 덧셈 순서
- 30. Java에서의 호출 방법
객체 1과 2는 동일한 참조를 가리키는 자동차가, 나는 빨간색 car2 칠 경우, 어떤 색상 car1했다 ??? –
첫 번째 문장에서 질문에 대답했다고 생각합니다. –
두 주소가 동일한 개체를 가리키는 경우 하나의 개체 만 있습니다. –