평등과 ==의 비교는 무엇입니까?
1. 부울 tem = a == b;
우선, == 비교는 확실히 주소입니다. 스택의 관점에서, 즉 == 비교는 스택의 내용입니다. 스택은 Java의 8 가지 기본 유형에 자동 변수의 문자 그럴 값을 저장하는 데 사용되기 때문에 (자동 변수는 int a = 1;)의 형태로 정의 된 변수입니다. 자동 변수 비교 값 인 경우 equals ()가 메소드이기 때문에 ==와 비교하는 데 분명히 사용되므로 비교에 사용될 객체에서 호출해야합니다. 자동 변수는 클래스의 인스턴스 나 클래스 참조가 아니므로 equals () 메소드를 사용할 수 없습니다.
2.Boolean tem = a.equals ( "b");
equals () 메소드는 일반적으로 객체의 내용을 비교하는 데 사용되지만 경우에 따라 두 객체의 주소를 비교합니다.
다음
테스트 프로그램을 작성하십시오
패키지 com; import java.util.date; public class test {public static void main (String [] args) {Integer Integer1 = new Integer (1); 정수 정수 2 = 새로운 정수 (1); 문자열 str1 = 새 문자열 ( "123"); 문자열 str2 = 새 문자열 ( "123"); 날짜 1 = 새 날짜 (); 날짜 2 = 새 날짜 (); double double1 = 새로운 더블 ( "1.0"); Double Double2 = 새로운 더블 ( "1.0"); 부울 tem1 = 새로운 부울 (True); 부울 tem2 = 새로운 부울 (True); Object1 = new Object (); Object2 = new Object (); System.out.println ( "---- 오브젝트 -------"); 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 ( "-----------"); 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 ( "-------------"); System.out.println (integer1.equals (integer2)); System.out.println (integer1 == integer2); System.out.println ( "-----------"); System.out.println (str1.equals (str2)); System.out.println (str1 == str2); System.out.println ( "-----------"); System.out.println ( "-----------"); System.out.println (str1 == str2); System.out.println ( "-----------"); System.out.println (date1.equals (date2)); System.out.println (date1 == date2); }}결과:
---물체-----
거짓
거짓
진실
진실
--- 부울 -----
진실
거짓
---더블-----
진실
거짓
---정수-----
진실
거짓
---끈-----
진실
거짓
---날짜-----
진실
거짓
첫째, 비교 된 두 객체가 동일하면 == 및 Equals ()의 결과는 참이며 두 객체가 다르면 거짓으로 반환됩니다. 따라서 ==와 평등이 객체를 비교하는 데 사용되면 물체의 주소를 비교하지만 실제로는 본질이 동일합니다. 다음은 객체 클래스의 equals () 메소드 코드입니다.
public boolean Equals (Object obj) {return (this == obj); }부울, 이중 (플로트), interger (shot, long), 문자열 및 날짜의 경우 소스 코드도 찾았습니다. 아래에 equals () 메소드의 소스 코드를 부울, 이중, 인터거기, 문자열 및 날짜에 게시했습니다. 이 시점에서 이러한 클래스가 객체 클래스에서 상속되기 때문에 equals () 메소드가 다시 작성되었습니다.
부울 :
public boolean equals (object obj) {if (obj instanceof boolean) {return value == ((boolean) obj) .booleanValue (); } false를 반환합니다. }더블:
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 == ((정수) obj) .intValue (); } false를 반환합니다. } 끈:
public boolean Equals (Object Anobject) {if (this == anobject) {return true; } if (anobject instancef 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]) false를 반환합니다. i ++; } true를 반환합니다. }} 거짓을 반환합니다. }날짜:
public boolean equals (Object obj) {return obj instanceof date && gettime () == ((날짜) obj) .gettime (); }다시 말해, 이시기에, 객체 클래스의 equals () 메소드는 다시 작성되어 두 객체의 실제 내용을 비교하고 더 이상 주소가 아닙니다. 물론, 그것은 분명히 이것들만이 아닙니다. Java Native Classes가 객체 클래스의 equals () 메소드를 다시 작성하는 몇 가지 일반적인 경우입니다.
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!