java面向对象(七) 对象比较

本文详细阐述了如何在Java中实现对象之间的比较操作,并提出了改进方法,使比较操作成为对象自身的功能,避免了主类不必要的判断,提高了代码的效率与可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果要比较两个对象是否相等,需要依次比较两个对象中的每一个属性的内容.范例如下:

class Person{
	private String name ;
	private int age ;
	public Person(){}
	public Person(String name, int age){
		this.name = name ;
		this.age = age ;
	}
	public void setName(String name){
		this.name = name ;
	}
	public void setAge(int age){
		this.age = age ;
	}
	public String getName(){
		return this.name ;
	}
	public int getAge(){
		return this.age ;
	}
}
public class TestDemo{
	public static void main(String args[]){
		Person per1 = new Person("张三",20) ;
		Person per2 = new Person("张三",20) ;
		if(per1.getName().equals(per2.getName()) && per1.getAge() == per2.getAge()){
			System.out.println("是同一个对象") ;
		}
		else{
			System.out.println("不是同一个对象") ;
		}
	}
}
运行结果:


以上程序虽然实现了两个对象的比较操作,但是在比较的时候是由主类判断的,这是不合适的,这种比较操作应该是每一个对象自己具备的功能,应该由本类完成.所以,修改后的范例如下:

class Person{
	private String name ;
	private int age ;
	public Person(String name , int age ){
		this.name = name ;
		this.age = age ;
	}
	public boolean compare(Person per){
		if(per == null){    //为避免NullPointerException的产生,增加一个null的判断
			return false ;
		}
		if(this == per){    //为了防止浪费性能的情况出现(要判断的属性较多),使用地址判断,因为相同的对象地址相同
			return true ;
		}//compare()方法中有两个对象:传入的Person,另外一个是this,进行属性的依次比较
		if(this.name.equals(per.name) && this.age == per.age){
			return true ;
		}
		return false ;
	}
	public void setName(String name){
		this.name = name ;
	}
	public void setAge(int age){
		this.age = age ;
	}
	public String getName(){
		return this.name ;
	}
	public int getAge(){
		return this.age ;
	}
}
public class TestDemo{
	public static void main(String args[]){
		Person per1 = new Person("张三",20) ;
		Person per2 = new Person("张三",20) ;
		if(per1.compare(per2)){
			System.out.println("是同一个对象.");
		}
		else{
			System.out.println("不是同一个对象.") ;
		}
	}
}
运行结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值