------- android培训、java培训、期待与您交流! ----------
先举个例子说明:
class Person
{
private String name;
private int age;
public Person(String name,int age)
{
this.name = name;
this.age = age;
}
}
class ObjectEqualsTest
{
public static void main(String[] args)
{
Person p1 = new Person("lily",20);
Person p2 = new Person("lily",20);
//判断p1和p2的内容是否相等
System.out.println(p1.equals(p2)?"是同一个人!":"不是同一个人");
}
}
运算结果如下:
C:\Users\lenovo\Desktop>javac ObjectEqualsTest.java
C:\Users\lenovo\Desktop>java ObjectEqualsTest
不是同一个人
C:\Users\lenovo\Desktop>
从上面的程序中可以发现,两对象的内容完全相等,但为什么比较的结果是不相等呢?
因为p1与p2的内容分别在不同的内存空间指向了不同的内存地址,所以在用equals()方法比较时,实际上是调用了Object类中的equals()方法,但可以发现此方法并不好用,所以在开发中往往需要复写equals方法,请看下面复写equals()方法后的结果。
示例:
class Person
{
private String name;
private int age;
public Person(String name,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object obj) //复写Object类中equals()方法
{
if(obj instanceof Person)
{
Person p = (Person)obj;
if(this.name.equals(p.name) && this.age==p.age)
return true;
}
else
return false;
return false;
}
}
class ObjectEqualsTest
{
public static void main(String[] args)
{
Person p1 = new Person("lily",20);
Person p2 = new Person("lily",20);
//判断p1和p2的内容是否相等
System.out.println(p1.equals(p2)?"是同一个人!":"不是同一个人");
}
}
运算结果如下:
C:\Users\lenovo\Desktop>javac ObjectEqualsTest.java
C:\Users\lenovo\Desktop>java ObjectEqualsTest
是同一个人!
C:\Users\lenovo\Desktop>
总结:
通过了上面的实例,证明了复写Object类中equals()方法可以提高程序的健壮性,让程序的功能更完整,所以开发中往往都要复写Object类中equals()方法。
"=="的特点:
用上面示例说明:
class Person
{
private String name;
private int age;
public Person(String name,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object obj) //复写Object类中equals()方法
{
if(obj instanceof Person)
{
Person p = (Person)obj;
if(this.name.equals(p.name) && this.age==p.age)
return true;
}
else
return false;
return false;
}
public boolean compareAge(Object obj) //使用"=="比较年龄
{
if(obj instanceof Person)
{
Person p = (Person)obj;
return this.age == p.age;
}
return false;
}
}
class ObjectEqualsTest
{
public static void main(String[] args)
{
Person p1 = new Person("lily",20);
Person p2 = new Person("lily",20);
//判断p1和p2的内容是否相等
System.out.println(p1.equals(p2)?"是同一个人":"不是同一个人");
System.out.println(p1==p2?"内存地址值相等":"内存地址值不等");
boolean bool = p1.compareAge(p2);
System.out.println(bool?"年龄相等":"年龄不相等");
}
}
运算结果如下:
C:\Users\lenovo\Desktop>javac ObjectEqualsTest.java
C:\Users\lenovo\Desktop>java ObjectEqualsTest
是同一个人
内存地址值不等
年龄相等
C:\Users\lenovo\Desktop>
总结:
从上面的例子可以看出,"=="是比较内存地址值,通过复写Object类中equals()方法比较内容是否相等,什么时候用"=="方法或equals()方法看需求而定。