java对象的比较分析

关于对象的比较我们可以通过以下三种手段来实现
一、利用"=="比较引用
Java中,当比较简单类型变量时用"==",只要两个简单类型值相等即返回ture,否则返回false,而在对象的比较中,"=="运算符就是比较引用变量所指向的内存地址是否相同 ;
 
二、通过覆盖equals方法比较引用

User u1=new User("Tom");  
User u2=new User("Tom");  
User u3=u1;  
u3.setName("Jack");  
u1==u3//true  
u1.equals(u3)//true  
u1==u2//false;  
u1.equals(u2)//false  

三、重写equals()方法
在Java API中,有些类重写了equals()方法,这些类包括:String、Double、Float、Long、Integer、Short、Byte、、Boolean、BigDecimal、BigInteger等等。

String s1=new String("hello");  
String s2=new String("hello");  
s1==s2//false,按地址进行比较  
s1.equals(s2)//true, 已重写,按值进行比较  

三、手动重写equals方法比较对象
在定义一个类的时候,如果涉及到对象的比较,应该重写equals()方法。
public boolean equals(Object o)  
{  
   //如果和自身比较,返回TRUE  
   if(this==o) return true;  
   //如果不是这个类的实例,返回FALSE  
   if(!o instanceof User) return false;  
     
   final User u=(User)o  
   if(this.getName().equals(u.getName())  
      return true;  
   else  
      return false;  
} 

最后给出一个标准的对象比较范例
package javacompareDemo;
//对象的比较
class person{
	private String name;
	private int age;
	public person(String name,int age){
		this.name=name;
		this.age=age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	//这里注意,比较操作是应该发生在person类内部函数上的
	public boolean compare(person per){               
		if(this==per)
			return true;
		if(this.name.equals(per.name)&&this.age==per.age)
			return true;
		else
			return false;	
	}
	
}
public class ClassCompare1 {

	public static void main(String[] args) {
	person per1 = new person("影流之主",19);
	person per2 = new person("放逐之刃",18);
	person per3 = new person("影流之主",19);
	System.out.println(per1.compare(per2));
	System.out.println(per1.compare(per3));
	}
}

posted @ 2015-01-14 21:42  walkthehorizon  阅读(188)  评论(0编辑  收藏  举报