class Cat
{
int color;
int height;
int weight;
public boolean equals(Object obj)
{
if(obj == null)
return false;
else
{
if(obj instanceof Cat)
{
Cat c = (Cat)obj;
if(c.color == this.color && c.height == this.height && c.weight == this.weight)
return true;
}
}
return false;
}
}
public class TestEquals
{
public static void main(String[] args)
{
Cat c1 = new Cat();
Cat c2 = new Cat();
System.out.println(c1==c2);//false
System.out.println(c1.equals(c2));//false 重写equals方法后,输出为true
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true
}
}
/*
1.String类中equals方法:
public boolean equals(Object anObject)将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。
覆盖:
类 Object 中的 equals
参数:
anObject - 与此 String 进行比较的对象。
返回:
如果给定对象表示的 String 与此 String 相等,则返回 true;否则返回 false。
2.Object类中的equals方法:
public boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系:
自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
参数:
obj - 要与之比较的引用对象。
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false。
2.Object类中的equals方法一般达不到我们的要求,因此一般都要重写
系统已经存在的String类已经重写了该方法
3.其实两个对象相比,已经默认调用了Object类的equals方法
对于:
Cat c1 = new Cat();
Cat c2 = new Cat();
System.out.println(c1==c2);//false
System.out.println(c1.equals(c2));
默认方法是返回false
只有引用变量指向同一个对象(内存)才为true
而对于:
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true
因为重写了Object类的equals方法,默认只要引用变量指向的对象中值相等,就为true
4.instance与typeof
前者是java的,后者是C,C++的
判断一个对象是否是一个类的对象
5.classpath问题
一般使用eclipse后就不会出现这种问题了
这和一台机器上安装多个版本的jdk类似,path变量中靠前的版本会覆盖掉后面的版本
和classpath中前面的目录下的重名的类会覆盖掉后面的目录中的同名的类一个道理
*/
{
int color;
int height;
int weight;
public boolean equals(Object obj)
{
if(obj == null)
return false;
else
{
if(obj instanceof Cat)
{
Cat c = (Cat)obj;
if(c.color == this.color && c.height == this.height && c.weight == this.weight)
return true;
}
}
return false;
}
}
public class TestEquals
{
public static void main(String[] args)
{
Cat c1 = new Cat();
Cat c2 = new Cat();
System.out.println(c1==c2);//false
System.out.println(c1.equals(c2));//false 重写equals方法后,输出为true
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true
}
}
/*
1.String类中equals方法:
public boolean equals(Object anObject)将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。
覆盖:
类 Object 中的 equals
参数:
anObject - 与此 String 进行比较的对象。
返回:
如果给定对象表示的 String 与此 String 相等,则返回 true;否则返回 false。
2.Object类中的equals方法:
public boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系:
自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
参数:
obj - 要与之比较的引用对象。
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false。
2.Object类中的equals方法一般达不到我们的要求,因此一般都要重写
系统已经存在的String类已经重写了该方法
3.其实两个对象相比,已经默认调用了Object类的equals方法
对于:
Cat c1 = new Cat();
Cat c2 = new Cat();
System.out.println(c1==c2);//false
System.out.println(c1.equals(c2));
默认方法是返回false
只有引用变量指向同一个对象(内存)才为true
而对于:
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true
因为重写了Object类的equals方法,默认只要引用变量指向的对象中值相等,就为true
4.instance与typeof
前者是java的,后者是C,C++的
判断一个对象是否是一个类的对象
5.classpath问题
一般使用eclipse后就不会出现这种问题了
这和一台机器上安装多个版本的jdk类似,path变量中靠前的版本会覆盖掉后面的版本
和classpath中前面的目录下的重名的类会覆盖掉后面的目录中的同名的类一个道理
*/