|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。
equals办法的主要性毋须多言,只需你想对照的两个对象不肯是统一对象,你就应当完成equals办法,让对象用你以为相称的前提来举行对照.上面的内容只是API的标准,没有甚么太深邃的意义,但我之以是开始把它列在这儿,是由于这些标准在现实中并非真正能包管失掉完成.
1.关于任何援用范例,o.equals(o)==true建立.
2.假如o.equals(o1)==true建立,那末o1.equals(o)==true也必定要建立.
3.假如o.equals(o1)==true建立且o.equals(o2)==true建立,那末o1.equals(o2)==true同样成立.
4.假如第一次挪用o.equals(o1)==true建立再o和o1没有改动的情形下今后的任何次挪用都建立.
5.o.equals(null)==true任什么时候间都不建立.
以上几条划定规矩并非最完全的表述,具体的请拜见API文档.关于Object类,它供应了一个最最周密的完成,那就是只要是统一对象是,equals办法才前往true,也就是人们常说的援用对照而不是值对照.这个完成周密得已没有甚么实践的意义,以是在详细子类(相对Object来讲)中,假如我们要举行对象的值对照,就必需完成本人的equals办法.
先来看一下以下这段程序:
publicbooleanequals(Objectobj)
{
if(obj==null)returnfalse;
if(!(objinstanceofFieldPosition))
returnfalse;
FieldPositionother=(FieldPosition)obj;
if(attribute==null){
if(other.attribute!=null){
returnfalse;
}
}
elseif(!attribute.equals(other.attribute)){
returnfalse;
}
return(beginIndex==other.beginIndex
&&endIndex==other.endIndex
&&field==other.field);
}
这是JDK中java.text.FieldPosition的尺度完成,仿佛没有甚么可说的.我信相年夜多半或尽年夜多半程序员以为,这是准确的正当的equals完成.究竟它是JDK的API完成啊.仍是让我们以现实来讲话吧:
packagedebug;
importjava.text.*;
publicclassTest{
publicstaticvoidmain(String[]args){
FieldPositionfp=newFieldPosition(10);
FieldPositionfp1=newMyTest(10);
System.out.println(fp.equals(fp1));
System.out.println(fp1.equals(fp));
}
}
classMyTestextendsFieldPosition{
intx=10;
publicMyTest(intx){
super(x);
this.x=x;
}
publicbooleanequals(Objecto){
if(o==null)returnfalse;
if(!(oinstanceofMyTest))returnfalse;
return((MyTest)o).x==this.x;
}
}
运转一下看看会打印出甚么:
System.out.println(fp.equals(fp1));打印true
System.out.println(fp1.equals(fp));打印flase
<p>
没有那个大公司会傻了吧唧用.net网页编程开发大型项目,开发了,那等于自己一半的生命线被微软握着呢。而.net网页编程不行,限制在window系统,又是捆绑,鄙视微软之! |
|