clsaa Employee{ public voolean equals(Object otherObject){ if(this == otherObject) return true; if(otherObject == null) return false; if(getClass() != otherObject.getClass())
return false; Employee other = (Employee)otherObject;
return name.equals(other.name)
&& salary == other.salary
&& hireDay.equals(other.hireDay);
}
}
这个判断是什么意思,难道是三个if都成立了之后.在返回Employee下面的返回吗?或者是如果其中一条if为true了,就返回它所携带的return,请大家为我详细介绍下,多谢大家了,本人实在是不明白,Employee根本就不是判断语句,最后怎么返回下面的了?
还有一件事,就是下面的return怎么用了equals??name.equals(other.name).这不是一直都调用自己么?直到程序崩溃为止???除非他用了super.equals啊.
希望大家说的明白点.
希望把你能知道的详细的告诉我,本人非常感谢,问题并不仅于此.另外,如果愿意就帮帮我,hashCode到底要怎么写,其中的散列码的数字是怎么来的,比如返回7乘name.hashCode();这个7又是什么意思.
return false; Employee other = (Employee)otherObject;
return name.equals(other.name)
&& salary == other.salary
&& hireDay.equals(other.hireDay);
}
}
这个判断是什么意思,难道是三个if都成立了之后.在返回Employee下面的返回吗?或者是如果其中一条if为true了,就返回它所携带的return,请大家为我详细介绍下,多谢大家了,本人实在是不明白,Employee根本就不是判断语句,最后怎么返回下面的了?
还有一件事,就是下面的return怎么用了equals??name.equals(other.name).这不是一直都调用自己么?直到程序崩溃为止???除非他用了super.equals啊.
希望大家说的明白点.
希望把你能知道的详细的告诉我,本人非常感谢,问题并不仅于此.另外,如果愿意就帮帮我,hashCode到底要怎么写,其中的散列码的数字是怎么来的,比如返回7乘name.hashCode();这个7又是什么意思.
其次只要运行了return xx,这个函数就结束。
只有在上面三个if都不成立的情况下才运行
Employee other = (Employee)otherObject;及其以下语句name.equals(other.name)&& salary == other.salary&& hireDay.equals(other.hireDay)
是个boolean型
-------------------------------------
调用自己只是算以下那一大长串的值是true还是false,只调用一下下,不会崩溃。
方法遇到return ...语句就结束了.
return name.equals(other.name) 中的name实为this.name,other.name为另一个实例的name.
clsaa Employee{ public voolean equals(Object otherObject){
boolean equ = false;
if(otherObject == nullthis == otherObject){
equ = false;
} else if(getClass() != otherObject.getClass()){
equ = false;
}
else if (this == otherObject)
{
equ = true;
}else { Employee other = (Employee)otherObject;
equ = name.equals(other.name)
&& salary == other.salary
&& hireDay.equals(other.hireDay);
}return equ;
}
整个过程就是
a.现看参数是否是null,是的话肯定不等
b,看看参数和该对象是否是相同的类型,不是的话肯定不等
c,看看两个是不是同一个引用指向的内存,或者说完全是一个对象,如果是,则肯定是true(就像张三==张三一样)
d看看对象和参数对象是否符合名字,薪水,工作日都是相同的(肯能这个方法就是说,如果这三个属性相同,就规定它相同),如果三者都想同,就是true.
实际上人们还是愿意想搂住那样写,因为对写程序的人来说,毕竟还是思路清晰,并且省很多source的,但是对测试来说可能就麻烦了
其实整个的流程就是还有
name.equals(other.name)
&& salary == other.salary
&& hireDay.equals(other.hireDay);
这一句里面用到的equals并不是Employee类的方法,而是name这个属性或者hireDay这个属性所属的类的方法(比方说 name是String类型的,这里的equals就是String的equals方法,hireDay是Integer类型的,equals就是Integer的equals方法).所以不会出现所谓的崩溃,因为并不是你说的调用自己的equals方法,而是调用另外的equals方法(String 类的或者Integer类的).因为equals方法是所有Object类的子类的一个共有的方法,因为Object就有这个方法了
=====================================================================
===============================================
这句写错了,应该是
if(otherObject == null){
--
return 就是直接返回了
本人实在是不明白,Employee根本就不是判断语句,最后怎么返回下面的了?--
Employee other = (Employee)otherObject;,
这个是转型,如何不明白什么是转型,那么请参看相应的书还有一件事,就是下面的return怎么用了equals??name.equals(other.name).这不是一直都调用自己么?直到程序崩溃为止???除非他用了super.equals啊.
--
比如 String name,那name.equals应该是调用的String 的equals而不是Employee 的equalshashCode到底要怎么写,其中的散列码的数字是怎么来的,比如返回7乘name.hashCode();这个7又是什么意思.
--
如连7是什么意思都不知道,那么请重新读小学1年级
当this==otherObject 两引用相等,肯定这两个对象相等.
当传递进来的对象为空,肯定不等.因为x.equale方法必须遵守以下特性:
自反性,对称性,一致性,传递性.第五点,对于任何非空引用x,x.equale(Null) 应该返回真.
第一条判断,是满足了自反性.任意非空引用x.equale(x)返回肯定为真.当两个对象引用所属的类不同,返回肯定是假,比如说Employee的对象e1.和Manager的对象e2.两者肯定不能相等.然后就是上面的条件都不成立的时候根据
return name.equals(other.name)
&& salary == other.salary
&& hireDay.equals(other.hireDay);
判断返回值.注意,这里的.equals并不会是反复掉用本身的equals一直到崩溃.你注意在equals上面曾经提到过,两者的对象相等引用就必定为真.这里你提的问题很好,当时我并没考虑这个地方.所以我现在查了一下equals的API.这里应该是调用本身还是Object的原equals方法....有待研究.不过我理解是这里是肯定返回真或假的.个人理解这里是调用的是Object的equals.因为你要注意到.hireDay.equals(other.hireDay);这里是hireDay.equals.是以这个hireDay对象为调用主体.而不是这个整个类的调用为体.也就是说.....我不知道该怎么解释了...
这么说吧.你可以用hireDay调用Employee类的方法吗?显然不行.只能调用object的方法对吧.所以这里不会反复执行.hashCode到底要怎么写,其中的散列码的数字是怎么来的,比如返回7乘name.hashCode();这个7又是什么意思.
至于这个问题就太简单了...就是调用object的hashCode方法.再随便乘一个整数..这个7随便写的....看书仔细点....hashCode都是自己编写的一套散列码获得方法...over...希望偶的解释正确和让你满意.因为偶也正在看这本书
For_suzhen(不懂装懂) 给出的代码并没有楼主的要好, 虽然方法单入单出是好
但事实上楼主的这种代码风格更容易让人理解.
个人喜好不同而已吧...
己说不欲勿施于人
如果你研究了出下面那个到底是调用自身还是调用他们所属的类对象,麻烦告诉声.