浅谈“equals”与“==”的区别

class Person
{
	private String name;
	private String idString;
	public Person(String name,String idString)
	{
		this.name = name;
		this.idString=idString;
	}
	
	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}
	public String getIdString()
	{
		return idString;
	}
	public void setIdString(String idString)
	{
		this.idString = idString;
	}
	public  boolean equals(Object obj)		
	{
		if(this==obj)//判断两个对象是否为同一个对象
			return true;//如果此处返回为false,即使返回的同一个对象也会使结果为false
		if (obj!=null&&obj.getClass()==Person.class)//判断obj是否为person实例。不能用instanceof判断
		//因为instanceof除了前面是后面的实例还有子类的情况下会返回true
		{
			Person person=(Person)obj;
			if (this.getIdString()==(person.getIdString())
					&&this.getName()==(person.getName()))	
			{
				return true;
			}			
		}
		return false;
	}
}
public  class PrintObject
{
	public static void main(String[] args)
	
	{		
		Person p1 = new Person("北京","122");
		Person p2=new Person("北京","122");
		Person p3=new Person("上海", "12545609");
				
		
		System.out.println("p1与p2是否相等"+ (p1==p2));
		System.out.println("p1与p2是否相等"+ p1.equals(p2));//注意此处与上一句的输出结果区别
		System.out.println("p3与p2是否相等"+p3.equals(p2));
	}
}


我们可以看到这样的输出结果:

p1与p2是否相等false
p1与p2是否相等true
p3与p2是否相等false

理由:“==”是判断两个变量是否相等,当两个变量都是引用类型变量,他们必须指向同一个对象,才会放回true,而且注意:"=="不能用于比较没有继承关系的两个对象

当判断基本数据类型时,一般都是数值类型,只要两个变量的值相等就可。

在object类中默认的equals其实与==没有任何区别,但是string中的equals是被重写过得,只要两个字符串的字符序列相同即可,不需要同一个对象。所以在实际应用中我们一般需要重写equals方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值