所有的问题都在图片中,求解答
对于两个对象是否“相等”, 我们有两种比较。
1>this==otherobject
如果两个对象用“==”来比较,那就是比较对象的引用(引用呢,就是存放在栈区的一个变量。它的值就是对象的地址。而对象真正是放在堆区的,你要使用它就找它的引用就好啦(也就是那一串地址))
每一个new出来对象都分配不同的堆空间,所以引用就不一样。
反之用“==”来比较,就是比较这两个对象在堆空间是不是一个地址。如果一样,那肯定是一样喽
2>就是这个equals()方法用来比较具体的对象的属性。因为两个地址不同的对象,虽然地址不同 但是可能属性一样,
1.getClass()调用的是当前对象的getClass()方法,getClass为非静态方法,而equals()方法也是非静态的,皆为当前对象所调用
2.此时比较的是OtherObject与当前对象
使用时为
Object o = new Object(1);
Object other = new Object(2);
o.equals(other);
3.先比较两者的地址,地址相同则两对象必然相同,
再看otherObject是否为空,若为空,则两对象必然不同
最后看两者是否为同一类,若所属类不同则两对象不同
你好,从你提的问题可以看出你应该刚学java没多久,其实这很好理解。
分别解答你的3个问题:
1、getclass() 调用和你想的一样,是省略了this,方法调用时不写默认是调用本身对象的方法。
2、equals 是判断两个对象是否相等。而不是判断地址是否相等。
3、this==otherobject 这个才是比较引用的地址;
otherObject == null 判断是为了下一步调用otherObject 对象,不出现空指针异常。
比较class是否相同时为了下面的强制转换类型
希望采纳。
我对于 前面三个if存在的意义完全不理解
这个图片中的内容就是告诉我们equals 比较的实际上是引用
难道你不满意我的回答啊,怎么不采纳呢?
首先看下Object类的equals源码: