欢迎光临
我们一直在努力

Java的“对象思想”学习笔记[二]-JSP教程,Java技巧及代码

建站超值云服务器,限时71元/月

在这篇文章里我将介绍一些java对于对象的基本处理模式的问题。

首先看一个有关对象相等性(object equivalence)的例子:

先看下面的代码:

public class equaltest1{

public static void main(string[] args){

integer n1 = new integer(20);

integer n2 = new integer(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内含同一个object reference。

原先a中所储存的reference,在赋值的过程中被覆写了,实际上就是遗失掉了,因为垃圾回收器(garbage collector)会在适当时机清理该reference原本指向的那个对象。

那么如何知道对象的内容是否相等呢?这里就要用到equals(),请看下面的代码:

public class equaltest2{

public static void main(string[] args){

integer n1 = new integer(20);

integer n2 = new integer(20);

system.out.println(n1.equals(n2));

}

}

这样输出的就是我门所期望的true了。然后,事情并不会如此简单,如果建立自有的class,那么事情会怎么样呢?请看相面的代码:

class value{

int i;

}

public class equaltest3{

public static void main(string[] args){

value v1 = new value();

value v2 = new value();

v1.i = v2.i = 20;

system.out.println(v1.equals(v2));

}

}

结果又输出了false,这是为什么呢??

其实,equals()的缺省行为是拿reference来比较,所以除非在你的class中覆写(override)equals(),否则不会得到预期的结果,而java标准程序库中的大多数class都覆写了equals(),所以他们都会比较对象的内容是否相同,这样一来,上面的问题就不难解决了。

有关覆写(override)技术将在今后深入的文章中介绍:)

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » Java的“对象思想”学习笔记[二]-JSP教程,Java技巧及代码
分享到: 更多 (0)

相关推荐

  • 暂无文章