对象比较

原创 2013年12月04日 10:13:04

如何比较一个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);
	}

}

 

复杂对象的比较

  • 2014年04月27日 23:53
  • 5KB
  • 下载

Java中比较两个对象是否相同

class Person extends Object { private int age; Person(int age)//构造函数 { this.age = age; } //判断...

Scala对象的相等性比较

如果你想比较一下看看两个Scala对象是否相等,可以使用或者==,或它的反义!=。下面举几个例子: scala> 1 == 2 res24: Boolean = false scala> 1...

Java中两个对象的比较 equals()方法和==号的区别

在Java中,时不时我们会把两个对象进行,然而得到的结果却不是我们想的结果,这是怎么回事呢? 一、两种形式的比较:比较时,我们要弄清楚是哪一种比较。       1.值类型比较       即内容...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对象比较
举报原因:
原因补充:

(最多只允许输入30个字)