|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
没有那个大公司会傻了吧唧用.net开发大型项目,开发了,那等于自己一半的生命线被微软握着呢。而.net不行,限制在window系统,又是捆绑,鄙视微软之!条记|对象在这篇文章里我将先容一些Java关于对象的基础处置形式的成绩。
起首看一个有关对象相称性(Objectequivalence)的例子:
先看上面的代码:
publicclassEqualTest1{
publicstaticvoidmain(String[]args){
Integern1=newInteger(20);
Integern2=newInteger(20);
System.out.println(n1==n2);
System.out.println(n1!=n2);
}
}
程序的目标是输入括号中的对照了局(boolean值),初度打仗Java的人很简单的以为输入了局为先true尔后false。
但实践上了局是先false尔后true,由于固然两个Integer对象的值是不异的,其reference却分歧。(注:有关reference的寄义在我的上一篇进修条记上有过先容,这里不再赘述。)
为懂得释下面这个成绩,我们应当懂得Java关于对象的基础处置形式:
当你操纵某个对象时,你所操纵的实际上是它的reference,好比A=B这个式子,就会将A和B都指向本来B所指向的对象,假如你改动了A的内容,那末同时也就变动了B的内容!由于A和B内含统一个objectreference。
本来A中所贮存的reference,在赋值的过程当中被覆写了,实践上就是丢失失落了,由于渣滓接纳器(garbagecollector)会在得当机会清算该reference底本指向的谁人对象。
那末怎样晓得对象的内容是不是相称呢?这里就要用到equals(),请看上面的代码:
publicclassEqualTest2{
publicstaticvoidmain(String[]args){
Integern1=newInteger(20);
Integern2=newInteger(20);
System.out.println(n1.equals(n2));
}
}
如许输入的就是我门所希冀的true了。然后,事变其实不会云云复杂,假如创建自有的class,那末事变会怎样呢?请看相面的代码:
classValue{
inti;
}
publicclassEqualTest3{
publicstaticvoidmain(String[]args){
Valuev1=newValue();
Valuev2=newValue();
v1.i=v2.i=20;
System.out.println(v1.equals(v2));
}
}
了局又输入了false,这是为何呢??
实在,equals()的缺省举动是拿reference来对照,以是除非在你的class中覆写(override)equals(),不然不会失掉预期的了局,而Java尺度程序库中的年夜多半class都覆写了equals(),以是他们城市对照对象的内容是不是不异,如许一来,下面的成绩就不难明决了。
有关覆写(override)手艺将在从此深切的文章中先容:)
大型的应用一般不会用这些框架(因为性能考虑);开发人员根据需要选择用一些框架,也可以不选用框架;不用框架并不代表要自己写框架;修改框架的可能性更小。 |
|