有关 java 重写equals 方法, 判断两个点是不是相同,求高手详细解答,谢谢!!!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关 java 重写equals 方法, 判断两个点是不是相同,求高手详细解答,谢谢!!!!!相关的知识,希望对你有一定的参考价值。

public class Point
private double x;

private double y;

public Point()

this(5, 0);



public Point(double x)

this(x, 0);


public Point(double x,double y)
super();
this.x = x;
this.y = y;



public void setX(double x)

this.x = x;


public double getX()

return this.x;


public void setY(double n)

this.y = y;


public String toString()

return this.x + "," + this.y;


//我就是不理解if 里面,为什么要这么写
public boolean equals(Point p)
if(this.x == p.getX() && this.y == p.getY() )

return true;
else
return false;




public double getY()

return this.y;


public static void main(String[] args)




public class TestWraper

public static void main(String[] args)

Integer i = new Integer(10);
Integer j = new Integer(10);
System.out.println(i.equals(j));
System.out.println(i.intValue() + 1);

String s = new String("devil");

Point p = new Point();
System.out.println(p);

Point p1 = new Point(3 , 3);
Point p2 = new Point(3 , 3);

System.out.println(p1.equals(p2));




我的想法是 判断两个点的X,Y分别是否相等,但是这个程序if 里面写的我看不太明白,this.x 指的是对象本身的吧?和p.getX()相比是什么意思啊,这不是自己跟自己对比吗?求高手详细解释下,我的理解应该是错误的。。。。谢谢。

当然不一样,给你举个例子
Point p1 = new Point(11,11);
Point p2 = new Point(22,22);
p1.equals(p2); //这就是equals的用法
你看,分明是两个对象,怎么会一样呢。
----------------------------------------------------------

楼主 我问你 怎么判断这两个点相等呢?

那就是x点坐标与y点坐标都一样不就是相等的么!追问

你的意思是 this.x 指的是p1的x吗?p.getX()指的是p2的x么?

追答

恩 呵呵

谁调用.equals方法 this就是谁

比如本例子是 this.x= p1.x
p.getX()=p2.x

楼主明白了么

参考技术A 你别忘了,equals方法是需要传对像进去的(新的Point 对像)
其实就是两个对像的比较
equals可以重写。
参考技术B 这里面用==检查的是:是否参数就是这个对象的引用
if( if(this.x == p.getX() && this.y == p.getY() )//既然都==了,肯定return ture!
==基本类型比较的是数值;引用类型比较的是地址!
参考技术C 这是两个对象的X和Y分别对比呀。this是指自身,p表示传进来的point。这个很好理解的,怎么会是错的呢。追问

this 指的不就是方法内的对象本身吗?那不就是跟P传进来的一样吗??

追答

当然不一样,给你举个例子
Point p1 = new Point(11,11);
Point p2 = new Point(22,22);
p1.equals(p2); //这就是equals的用法
你看,分明是两个对象,怎么会一样呢。

重写equals()方法和 hashCode()方法

java中判断两个对象是否相等的规则:
首先,判断两个对象的hashCode是否相等 
如果不相等,认为两个对象也不相等 
如果相等,则判断两个对象用equals运算是否相等 
如果不相等,认为两个对象也不相等 
如果相等,认为两个对象相等 

我们在equals方法中需要向下转型,效率很低,所以先判断hashCode方法可以提高效率。

equals()相等的两个对象,hashcode()一定相等; 
equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。

1,所有Java类都继承自Object类
2,Object类中有
public int hashCode(){}
public boolean equals(Object obj){}
这两个方法及其他的方法。
在Object类中,equls()方法和==的本质是相同的,都是判断两个引用是否指向同一对象。
String类继承自Object类:但String类重写了equals()方法,
使得:equals()方法的作用是比较两个字符串的内容是否相等;
==的作用是比较两个引用是否指向同一个对象;
很多类都重写了equals方法,供自己产生新的定义。
3,在本程序中:Items类继承自Object类,并且重写了equals()方法,不按照父类的比较方法来比较两个对象,使得该方法能够按照程序员自己的意愿来比较两个对象

@Items.java//解决编号没有合并问题
@Override
public int hashCode() {
    //若getId和getName相同,则hashCode一定相同
    return this.getId()+this.getName().hashCode();
}

@Override
public boolean equals(Object obj) {
    // TODO Auto-generated method stub
    if(this==obj)
    {
        return true;
    }
    if(obj instanceof Items)
    {
        Items i = (Items)obj;
        if(this.getId()==i.getId()&&this.getName().equals(i.getName()))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}                            

 

以上是关于有关 java 重写equals 方法, 判断两个点是不是相同,求高手详细解答,谢谢!!!!!的主要内容,如果未能解决你的问题,请参考以下文章

java重写equals方法(重点讲解)

Java重写equals方法

重写equals()方法和 hashCode()方法

JAVA中重写equals()方法的同时要重写hashcode()方法

JAVA常见问题

重写java类的equals()和hashCode方法