您的位置:首页 > 编程语言 > Java开发

Java对象的相等性判断 equasl( )方法 与 ==操作符

2015-07-28 11:59 344 查看
我们经常看到这么一句话,Java中==比较的是对象的引用,而equals方法比较的是对象的内容。这句话到底对不对,我们进行一次测试。
Java作为一种面向对象的语言,其中的变量主要有int, char...等等基本类型,和各种的类型实例化对象的引用变量。Java中用来测试对象的相等性有两种方法,一种是使用关系操作符 == 来进行比较,另一种是使用Java的Object类中定义的equals( )方法。
其中==操作符是用来比较对象的引用,若两个引用指向的是同一个对象,则返回的是 true,否则返回的则是false。
而equals( )方法只能用于对象的比较,不能用在基本类型比较,(所以Java中的基本类型只能使用==操作符进行相等性判断)在Object类中的定义如下:

public boolean equals(Object obj)
{
[align=left] return (this == obj );[/align]
[align=left] }[/align]
[align=left] 显而易见的是,在定义equals方法时,Object类使用的是 == 操作符。如果直接调用Object类的equals方法,实际就是使用了==操作符来测试两个对象是否相等,是没有意义的。所以在使用该方法时要注意是否重写过。测试如下:[/align]

public class EqualTest
{
int flag =
0;
[align=left] public static void main(String[] args){[/align]
[align=left] [/align]
[align=left] EqualTest etOne = new EqualTest();[/align]
[align=left] EqualTest etTwo = new EqualTest();[/align]
etOne. flag =
1; etTwo. flag = 1;
[align=left] println(etOne.equals( etTwo));[/align]
[align=left] [/align]
[align=left] etTwo = etOne;[/align]
[align=left] println(etOne.equals( etTwo));[/align]
[align=left] [/align]
[align=left] } [/align]
[align=left]}[/align]
[align=left]输出结果:false[/align]
[align=left] true[/align]
[align=left] [/align]
[align=left] 显然,在自己未重写equals方法时,调用equals方法就等同使用==操作符,只有在两个引用指向同一个对象时才返回true。所以Java类库中的绝大多数类都重写了equals方法,拿String类来说,他重写了方法,使其功能变为比较对象的内容,不同的对象内容相同时,也返回true。其中重写的equals方法代码如下:[/align]

public boolean equals(Object anObject )
{
if (this == anObject )
{
[align=left] return true ;[/align]
[align=left] }[/align]
if (anObject instanceof String)
{
[align=left] String anotherString = (String)anObject ;[/align]
[align=left] int n = value .length ;[/align]
if (n == anotherString .value .length )
{
char v1 []
= value ;
char v2 []
= anotherString .value ;
int i =
0;
while (n --
!= 0) {
if (v1 [i ]
!= v2 [i ])
[align=left] return false ;[/align]
[align=left] i++;[/align]
[align=left] }[/align]
[align=left] return true ;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] return false ;[/align]
[align=left] }[/align]

[align=left]测试一下:[/align]

public class EqualTest
{
int flag =
0;
[align=left] public static void main(String[] args){[/align]
[align=left] [/align]
String one = "Hello
Java" ;
String two = new String("Hello
Java" );
[align=left] String three = one ;[/align]
[align=left] [/align]
[align=left] println( one== two);[/align]
[align=left] println( one.equals( two));[/align]
[align=left] println( one == three);[/align]
[align=left] [/align]
[align=left] } [/align]
[align=left]}[/align]

[align=left]output: false[/align]
[align=left] true[/align]
[align=left] true[/align]

[align=left] 显然,String类在调用equals方法时,是调用了自身重写的方法,比较的是String类的内容。所以要实现比较内容的功能,必须在类里重写equals方法。否则就等同于使用==操作符。[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: