java equals와 ==의 차이점

대충 equals와 ==를 비교한 것은 무엇입니까?
  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 () 방법을 몇 가지 제시한 경우일 뿐이다.
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기