关闭

对象比较

264人阅读 评论(0) 收藏 举报

如何比较一个model对象?

如果使用==则是比较两个对象是否存在在同一个内存区域内,如果两个对象都是new产生的,那么他们肯定不是在同一个内存区域,所以比较肯定是不相等的。而Object类有一个equlas方法,因此我们可以通过重写equals方法来作为对象的比较,下面是我自己写的demo

 

1、新建一个对象model

package hb;

import java.util.Date;


public class Person {

	public String id;
	public String name;
	public Date birthday;
	public int age;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public boolean equals(Object obj) {

		//比较的对象如果为null
		if(obj==null){
			return false;
		}
		//判断是否是同一对象
		else if(this == obj){
			return true;
		}
		else{
			//判断传递的对象是否是Person类,如果不是则返回false,如果是则比较对象的各个属性
			if(obj instanceof Person){
				Person p = (Person)obj;
				//比较int原始类型用==
				if(this.getAge()!=p.getAge()){
					return false;
				}
				
				//测试不包含日期是否相等
				if(p.getBirthday()!=null){
					if(!p.getBirthday().equals(this.getBirthday())){
						return false;
					}
				}else{
					if(this.getBirthday()!=null){
						return false;
					}
				}
				
				if(p.getName()!=null){
					if(!p.getName().equals(this.getName())){
						return false;
					}
				}else{
					if(this.getName()!=null){
						return false;
					}
				}
				
				if(p.getId()!=null){
					if(!p.getId().equals(this.getId())){
						return false;
					}
				}else{
					if(this.getId()!=null){
						return false;
					}
				}
				
			}else{
				return false;
			}
			
		}
		
		return true;
	}
}

 

2、测试类

package hb;

import java.util.Date;

import org.junit.Test;

public class ComparePerson {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Person p1 = new Person();
		Person p2 = new Person();
		
		Date now = new Date();
		
		p1.setAge(12);
		p2.setAge(12);
		
		p1.setBirthday(now);
		p2.setBirthday(now);
		
		p1.setId("id");
		p2.setId("id");
		
		p1.setName("name");
		p2.setName("name");
		
		boolean result = p1.equals(p2);
		
		System.out.println(result);
		
	}
	
	//原始类型比较
	@Test
	public void compareInt(){
		int a = 9;
		int b = 9;
		//原始类型不是对象,因此没有equalse方法,只能使用==比较
		System.out.println(a==b);
		
	}
	
	@Test
	public void defaultInt(){
		
		Person p1 = new Person();
		Person p2 = new Person();
		
		Date now = new Date();
		
		//默认对象属性int类型的值为0
//		p1.setAge(12);
		p2.setAge(0);
		
		p1.setBirthday(now);
		p2.setBirthday(now);
		
		p1.setId("id");
		p2.setId("id");
		
		p1.setName("name");
		p2.setName("name");
		
		boolean result = p1.equals(p2);
		
		System.out.println(result);
		
	}
	
	//如果对象相同,则equals()方法返回ture之后就不会继续向下运行
	@Test
	public void compareSameObj(){

		Person p2 = new Person();
		
		Date now = new Date();
		
		p2.setAge(0);
		
		p2.setBirthday(now);
		
		p2.setId("id");
		
		p2.setName("name");
		
		boolean result = p2.equals(p2);
		
		System.out.println(result);
	}
	
	//比较不同的对象
	@Test
	public void compareDifObj(){
		Person p2 = new Person();
		boolean result = p2.equals(new Date());
		System.out.println(result);
	}
	
	//比较某个属性不存在
	@Test
	public void comparePropNotExits(){
		Person p1 = new Person();
		Person p2 = new Person();
		
		Date now = new Date();
		
		p1.setAge(12);
		p2.setAge(12);
		
		p1.setBirthday(now);
		
		p1.setId("id");
		p2.setId("id");
		
		p1.setName("name");
		p2.setName("name");
		
		boolean result = p1.equals(p2);
		
		System.out.println(result);
	}

}

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:285424次
    • 积分:8483
    • 等级:
    • 排名:第2299名
    • 原创:1096篇
    • 转载:14篇
    • 译文:0篇
    • 评论:4条
    最新评论