자바 대상 간 의 비교,두 대상 의 특정한 속성 이 같다 고 판단 하면 대상 이 같다.

4575 단어 JAVA
지식 포인트:equals()재 작성 방법
먼저 문자 적 인 것 을 살 펴 보 자.
단순 유형 비교
 
자바 에서 비교적 간단 한 유형 변 수 는'=='을 사용 합 니 다.두 개의 간단 한 유형 값 이 같 으 면 ture 로 돌아 갑 니 다.그렇지 않 으 면 false 로 돌아 갑 니 다.
 
2.인용 유형 비교
 
인용 유형 이 비교적 변태 적 이 므 로'=='을 사용 할 수도 있 고'equals()'로 비교 할 수도 있 습 니 다.equals()방법 은 Object 류 에서 나 왔 습 니 다.사용자 정의 클래스 마다 이 방법 을 다시 쓸 수 있 습 니 다.Object 클래스 의 equals()방법 은'=='만 을 통 해 두 대상 이 같 는 지 비교 합 니 다.
 
'=='로 인용 유형 을 비교 할 때 두 응용 변수의 대상 이 같은 대상 을 가리 킬 때 만 ture 로 돌아 갑 니 다.언외 의 뜻 은 두 변수 가 가리 키 는 메모리 주소 가 같 을 때 만 true 로 돌아 갈 수 있 고 모든 대상 은 자신의 메모리 가 있 기 때문에 같은 대상 을 가리 키 고 ture 로 돌아 가 야 한 다 는 것 이다.
 
'equals()'로 인용 유형 을 비교 할 때 상황 이 복잡 하고 심지어 변태 가 있어 함정 에 빠 지기 쉽다.
 
자바 API 에서 일부 클래스 는 equals()방법 을 다시 썼 습 니 다.그들의 비교 규칙 은 이 equals 방법 매개 변수 가 null 이 아니 라 두 변수의 유형,내용 이 모두 같 으 면 비교 결 과 는 true 입 니 다.이러한 유형 은 String,Double,Float,Long,Integer,Short,Byte,Boolean,BigDecimal,BigInteger 등 을 포함 하고 너무 많 지만 흔히 볼 수 있 는 것 은 이것 입 니 다.구체 적 으로 API 중의 equals()방법 을 보면 알 수 있 습 니 다.
 
변 태 를 분석 하 는 부 울 린 류:이런 종류 중에서 가장 변 태 는 부 울 린 류 를 세 는 것 이다.나 는 부 울 린 류 를 개발 하 는 사람들의 머리 가 물 에 들 어간 것 같다.나 도 자세히 말 하고 싶 지 않다.너 는 좋 은 4 가지 방법 으로 Boolean 대상 을 만 들 수 있다(두 가지 구조 방법,두 가지 정적 방법 value Of().정적 방법 을 추천 한다).
 
Boolean 류 의 변 태 는 equals()방법 에 있 지 않다.Boolean 대상 생 성 방법 입 니 다.사실 Boolean 류 의 대상 은 최대 두 개 이 고 toString()값 은 각각 true 와 false 이다.true 나"true"로 만 든 Boolean 클래스 가 같은 대상 이 고 toString()값 이 true 일 때 만 사용 합 니 다.다른 문자열 이나 false 가 만 든 Boolean 대상 의 값 은 모두 같 고 toString()값 은 false 입 니 다.
 
3.equals()재 작성 방법
 
클래스 를 정의 할 때 대상 의 비교 와 관련 되면 equals()방법 을 다시 써 야 합 니 다.다시 쓰 는 일반적인 규칙 은:
 
1.먼저'='으로 동일 여 부 를 판단 한다.
 
2.equals()방법의 매개 변수 가 null 인지 판단 하고 null 이면 false 로 돌아 갑 니 다.현재 대상 이 null 일 수 없 기 때문에 null 일 경우 equals()방법 을 사용 할 수 없습니다.그렇지 않 으 면 자바.lang.NullPointer Exception 이상 을 던 집 니 다.
 
3.매개 변수 가 null 이 아니라면 두 대상 이 실 행 될 때 클래스(getClass()를 통 해 가 져 오기)가 같 지 않 으 면 false 로 돌아 갑 니 다.그렇지 않 으 면 계속 판단 합 니 다.
 
4.클래스 의 구성원 이 대응 하 는 지 여 부 를 판단 한다.아래로 내 려 가면 마음대로 발휘 할 수 있다.허허!
다음은(3)에 근거 하여 구체 적 인 예 를 살 펴 보 자.
요구:하나의 List 대상 에서 하나의 대상 이 포함 되 어 있 는 지 판단 합 니 다.List 의 한 대상 의 username 속성 과 비교 하고 자 하 는 username 의 username 이 같 으 면 두 대상 이 같다 는 것 을 증명 합 니 다.
user.java
public class User {
	
	private String username;
	private String password;
	private String gender;
	private int age;
	public User(String username, String password, String gender, int age) {
		this.username = username;
		this.password = password;
		this.gender = gender;
		this.age = age;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	//       equals  
	@Override
	public boolean equals(Object obj){
		if(obj == null){
			return false;
		}else {			
				if(this.getClass() == obj.getClass()){
					User u = (User) obj;
					if(this.getUsername().equals(u.getUsername())){
						return true;
					}else{
						return false;
					}
				
			}else{
				return false;
			}
		}			
	}
	

}

CompareUser.java
import java.util.ArrayList;
import java.util.List;

public class CompareUser {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		User u1 = new User("zhangsan","222"," ",12);
		User u2 = new User("lisi","333"," ",15);		
		User u3 = new User("wangwu","555"," ",13);
		User u4 = new User("zhangsan","444"," ",14);
		
		List users = new ArrayList();
		users.add(u1);
		users.add(u2);
		users.add(u3);
		
		boolean isEqual = users.contains(u4);
		System.out.println("u1 u4      :"+isEqual);
		

	}

}

최종 결 과 는 true 로 u1 과 u4 가 같다 는 뜻 이다.
총화
 
'=='비교 대상 이 같은 대상 을 인 용 했 는 지,아니면 비교적 간단 한 유형의 변수 값 이 같 았 는 지 여부 입 니 다.
Object 클래스 의 equals()방법 은 대상(메모리 주소 비교)여 부 를 비교 하 는 데 사 용 됩 니 다.다시 쓸 수 있 습 니 다.
JDK 중 일 부 는 이퀄 스(equals)방법 을 다시 써 서 유형,내용 이 모두 같 으 면 같다 고 생각 하 는 경우 도 있다.
변태 적 인 Boolean 류 는 두 개의 실례 만 존재 한다.구체 적 으로 API 를 볼 수 있 습 니 다.
일반적으로 하나의 클래스 가 비교 와 관련 되면 equals()방법 을 다시 써 야 합 니 다.메모리 주소 가 의미 가 없 기 때 문 입 니 다.

좋은 웹페이지 즐겨찾기