java 区别“==”和equals()方法

/*
Object是所有类的父类:
它有一个equals方法,这个方法是用来比较两个对象的引用是否相同,而不是比较对象内容是否相同。
"=="比较的是两个对象的引用,Object中的equals方法比较的也是两个对象的引用。所以在Object类中==和equals的作用是一样的。


所以在子类中一般会重写覆盖此equals方法,使得equals方法实现比较对象内容是否相同的功能。这时==和equals的功能就不一样了。
==还适用于比较对象引用,而equals是用于比较对象(具体来说是对象内容)

新定义类的对象一般要重写equals方法。


*/


class Demo
{
	private String name;
	Demo(String name)
	{
		this.name=name;
	}

	public boolean equals(Object obj)  //重写equals方法。
	{
		if(obj==null)
			return false;
		if(obj instanceof Demo)
		{
			Demo d=(Demo)obj;
			return this.name.equals(d.name);
		}
		return false;
	}

}


class EqualsTest 
{
	public static void main(String[] args) 
	{
		Demo d1=new Demo("Hello");
		Demo d2=new Demo("Hello");
		sop(d1==d2);
		sop(d1.equals(d2));
		
		String str1="Hello";
		String str2="Hello";
		String str3=new String("Hello");
		String str4=new String("Hello");

		sop(str1==str2);
		sop(str1.equals(str2));

		sop(str3==str4);//比较两个对象引用肯定是不一样的。
		sop(str3.equals(str4));//在String类中重写了Equals方法,比较的是引用指向的对象内容。

		sop(str1==str3);
		sop(str1.equals(str3));

		

		//System.out.println("Hello World!");
	}

	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}

你可能感兴趣的:(java,equals方法)