이 글은 Java에서 ==와 같음의 차이점에 대한 자세한 설명을 제공합니다. 여기에는 특정 참조 값이 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
Java에서 ==와 같음의 차이점을 완벽하게 정확하게 말할 수 있는 사람은 소수에 불과하다고 생각합니다.
일반적인 오답은 다음과 같습니다. == 기본 유형은 값이 동일한지 비교하고, 참조 유형은 참조가 동일한지 비교하며, 같음은 값이 동일한지 비교합니다.
왜 틀렸는지는 이 글의 ==와 같음에 대한 설명을 읽으면 알 수 있습니다.
1. == 해석
기본 유형과 참조 유형에 따라 다음과 같이 ==의 효과가 다릅니다.
기본 유형: 비교되는 것은 값이 동일한지 여부입니다. 비교 여부는 참조가 동일한지 여부입니다. 동일합니다.
코드 예:
String x = "string"; String y = "string"; String z = new String("string"); System.out.println(x==y); // true System.out.println(x==z); // false System.out.println(x.equals(y)); // true System.out.println(x.equals(z)); // true
코드 해석: x와 y가 동일한 참조를 가리키므로 ==도 true이고 새 String() 메서드가 다시 작성되어 열립니다. 메모리 공간이므로 == 결과는 false 이고, 같음은 항상 값을 비교하므로 결과는 모두 true입니다.
2. 동등의 해석
equals는 본질적으로 ==입니다. 단, 문자열과 정수는 동등 메소드를 재정의하고 이를 값 비교로 전환합니다. 이해하려면 아래 코드를 살펴보세요.
먼저 기본적으로 동일한 값을 갖는 객체를 비교하는 Equals를 살펴보겠습니다. 코드는 다음과 같습니다.
class Cat { public Cat(String name) { this.name = name; } private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } Cat c1 = new Cat("王磊"); Cat c2 = new Cat("王磊"); System.out.println(c1.equals(c2)); // false
출력 결과가 기대 이상입니다. 거짓인가요? 무슨 일이 일어나고 있는 걸까요? 소스 코드를 읽어보면 알 수 있습니다.
public boolean equals(Object obj) { return (this == obj); }
equals는 본질적으로 ==입니다.
그렇다면 동일한 값을 가진 두 개의 String 객체가 true를 반환하는 이유는 무엇일까요? 코드는 다음과 같습니다.
String s1 = new String("老王"); String s2 = new String("老王"); System.out.println(s1.equals(s2)); // true
마찬가지로 String의 equals 메소드를 입력하면 답을 찾습니다.
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
String이 Object의 equals 메소드를 재정의하고 참조 비교를 다음으로 변경합니다. 가치 비교.
3. 요약
일반적으로 ==는 기본 유형에 대한 값 비교이고, 참조 유형에 대해서는 기본적으로 참조 비교이지만 많은 클래스에서 이를 다시 작성했습니다. String, Integer 등의 equals 메소드는 이를 값 비교로 변환하므로 일반적인 상황에서는 값이 같은지 비교합니다.
위 내용은 Java에서 ==와 같음의 차이점에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!