java equals와 ==의 차이점
4772 단어 javaequals 및 ==구별
1. boolean tem = a == b;
우선 == 비교한 것은 틀림없이 주소일 것이다. 창고의 측면에서 말하자면 == 비교한 것은 창고 위의 내용이다.창고는 주소나 자바의 8대 기본 형식 중 자동 변수를 저장하는 데 쓰이기 때문이다. (자동 변수는 inta=1; 이런 형식으로 정의된 변수이다.)자동 변수 비교 값이라면 틀림없이 ==로 비교할 것이다. equals () 는 하나의 방법이기 때문에 반드시 대상이 호출해야 비교에 사용할 수 있다.자동 변수는 클래스의 실례도 클래스의 인용도 아니기 때문에 equals () 방법을 사용할 수 없습니다.
2.boolean tem = a.equals("b");
equals () 방법은 일반적으로 대상의 내용을 비교하는 데 사용되지만 두 대상의 주소를 비교하는 경우도 있다.
다음
테스트 프로그램을 하나 쓰다
package com;
import java.util.Date;
public class test {
public static void main(String[] args) {
Integer integer1 = new Integer(1);
Integer integer2 = new Integer(1);
String str1 = new String("123");
String str2 = new String("123");
Date date1 = new Date();
Date date2 = new Date();
Double double1 = new Double("1.0");
Double double2 = new Double("1.0");
Boolean tem1 = new Boolean(true);
Boolean tem2 = new Boolean(true);
Object object1 = new Object();
Object object2 = new Object();
System.out.println("----Object------");
System.out.println(object1.equals(object2));
System.out.println(object1 == object2);
System.out.println(object1.equals(object1));
System.out.println(object1 == object1);
System.out.println("----Boolean------");
System.out.println(tem1.equals(tem2));
System.out.println(tem1 == tem2);
System.out.println("----Double------");
System.out.println(double1.equals(double2));
System.out.println(double1 == double2);
System.out.println("----Integer------");
System.out.println(integer1.equals(integer2));
System.out.println(integer1 == integer2);
System.out.println("----String------");
System.out.println(str1.equals(str2));
System.out.println(str1 == str2);
System.out.println("----Date------");
System.out.println(date1.equals(date2));
System.out.println(date1 == date2);
}
}
결과:----Object------
false
false
true
true
----Boolean------
true
false
----Double------
true
false
----Integer------
true
false
----String------
true
false
----Date------
true
false
우선 Object에 대한 비교는 비교된 두 대상이 같을 때 ==와 equals()의 결과는true이고 두 대상이 같지 않을 때 되돌아오는 것은false이다.그래서 ==와 equals가 대상을 비교할 때 그들이 비교한 것은 모두 대상의 주소인데 사실 본질은 같다.다음은 Object 클래스에서 equals() 메서드의 코드입니다.
public boolean equals(Object obj) {
return (this == obj);
}
그리고 Boolean, Double(Float 동리), Interger(Shot, Long 동리), String, Date에 대해서도 나는 그들의 원본을 찾았다. 다음은 Boolean, Double, Interger, String, Date 등 종류 중 equals() 방법의 원본을 순서대로 붙였다. 이때 equals() 방법은 다시 썼다. 왜냐하면 이런 종류들은 모두 Object 종류에 계승되었기 때문이다.Boolean:
public boolean equals(Object obj) {
if (obj instanceof Boolean) {
return value == ((Boolean)obj).booleanValue();
}
return false;
}
Double:
public boolean equals(Object obj) {
return (obj instanceof Double)
&& (doubleToLongBits(((Double)obj).value) ==
doubleToLongBits(value));
}
Interger:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
String:
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;
}
Date:
public boolean equals(Object obj) {
return obj instanceof Date && getTime() == ((Date) obj).getTime();
}
즉, 이때 Object 클래스를 다시 쓴 equals () 방법은 두 대상의 실제 내용을 비교하는 데 사용되고 더 이상 주소가 아니다. 물론 이것만이 아니다. 여기서 흔히 볼 수 있는 자바 원생류가 Object 클래스를 다시 쓰는 equals () 방법을 몇 가지 제시한 경우일 뿐이다.읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.