主类public class Test{
public static void main(String[]args){
Object circle = new Circle();
Object circle2 = new Circle();
System.out.println(circle.equals(circle2));
}
}
当Circle类是
class Circle{
private int x;
public boolean equals(Object circle){
return this.x == ((Circle)circle).x;
}
}时,控制台输出true
但是,Circle类为
class Circle{
private int x;
public boolean equals(Circle circle){
return this.x == circle.x;
}
}时,控制台输出false
为什么第二个会输出false,我是初学者,希望大侠相助~~
public static void main(String[]args){
Object circle = new Circle();
Object circle2 = new Circle();
System.out.println(circle.equals(circle2));
}
}
当Circle类是
class Circle{
private int x;
public boolean equals(Object circle){
return this.x == ((Circle)circle).x;
}
}时,控制台输出true
但是,Circle类为
class Circle{
private int x;
public boolean equals(Circle circle){
return this.x == circle.x;
}
}时,控制台输出false
为什么第二个会输出false,我是初学者,希望大侠相助~~
Object circle2 = new Circle();
public boolean equals(Circle circle){
return this.x == circle.x;
}对象类型不匹配
return this.x == circle.x;
}
刚才用myEclipse、debug走了两边才发现这个方法根本不进去。加了个@Override才发现程序报错了。这个方法只能算作是用户自定义一个和object类同名的方法。实际并不是对object类中equals方法的重写,当使用时会调用object类的equals方法。第一个,你重写了equals方法 是比较 只要x相等就返回true第二个,你没重写equals方法 是比较 两个引用是否指向同一对象 , 你new了2次生成两个对象, 当然false
Object circle2 = new Circle();
public boolean equals(Object circle){
return this.x == ((Circle)circle).x;
}第一个是: 传入的是object的对象,在equals的时候,来了个强制类型的转换public boolean equals(Circle circle){
return this.x == circle.x;
}第二个是: 传入的是 Circle的对象,直接赋值,false的原因就是: 对象的类型不匹配
若是在集合之中比较,则类要实现Comparable接口并实现compareTo()方法。
主类public class Test{
public static void main(String[]args){
Object circle = new Circle();
Object circle2 = new Circle();
System.out.println(circle.equals(circle2));
}
}
当Circle类是
class Circle{
private int x;
public boolean equals(Object circle){
return this.x == ((Circle)circle).x;
} 你这样写,其实还是在调用Object类的equals方法
在API中是这样说的:public boolean equals(Object obj)
此时,你的equals并没有实现对Object的覆写
当你这样写的时候,就是覆写。而覆写equals()必须要覆写hashcode()。所以会出现false。
public boolean equals(Circle circle){
return this.x == circle.x;
}
public static void main(String[]args){
Object circle = new Circle();
Object circle2 = new Circle();
System.out.println(circle.equals(circle2));
System.out.println(circle.equals((Circle)circle2)); //强制转换为Circle类型
}class Circle{
private int x;
//参数是object类型
public boolean equals(Object circle){
return this.x == circle.x;
}
//参数是Circle类型
public boolean equals(Circle circle){
return this.x == ((Circle)circle).x;
}
}
public class BasicContainer {
public static void main(String args[]) {
Collection c = new HashSet();
Name n = new Name("ye","dame");
Name m = new Name("ye","dame");
c.add(n);
System.out.println(c.remove(m));
System.out.println(c);
}
}class Name{
String firstname;
String secondname;
Name(String firstname,String secondname) {
this.secondname = secondname;
this.firstname = firstname;
}
public boolean equals(Name n) {
return (this.secondname.equals(n.secondname)) && (this.firstname.equals(n.firstname));
}
public int hashCode() {
return firstname.hashCode();
}
}
还是不行,我已经改了参数类型了还是返回了false怎么搞