当前位置: 代码迷 >> Java相关 >> 能不能利用这两个程序讲解一下==和equals的区别?
  详细解决方案

能不能利用这两个程序讲解一下==和equals的区别?

热度:154   发布时间:2006-08-18 21:05:34.0
以下是引用NiceGirl在2006-8-14 0:02:10的发言:
==比较引用
Object中的equals比较的也是引用,在String和一些包装类中被重写,比较的是对象的实际内容

楼上的讲的不对的。。。。。楼上几位都没有注意看人家2楼发的帖子。。。这里我再发一下
也写个例子
Integer a1 = new Integer( 100 );
Integer a2 = new Integer( 100 );
System.out.println( a1.equlas(a2));


class Number {
int i;
}

class EqulasTest {
public static void main( String[] args ) {
Number n1 = new Number( );
Number n2 = new Number( );
n1.i = n2.i = 100;
System.out.println( n1.equlas(n2));
}
}
上一个是TRUE 后一个是FLASE

PS:上面的程序是我手打的  如不能运行 还请自己改下

[此贴子已经被作者于2006-8-18 21:06:25编辑过]


----------------解决方案--------------------------------------------------------
我的意思是说能不能解释一下为什么第一个结果是true,第二个结果是false?
----------------解决方案--------------------------------------------------------
很简单"=="的行为是确定的,就是比较两个引用是否指向同一个对象,是就TRUE,否则false;
而equals是一个方法,他的行为是可以通过在子类中覆写父类的equals方法而改变的;

换句话说,equals的行为是由你自己去定义的,你想让它怎么着都行;

比如Object的equals方法就是调用"==",所以对Object类,equals与"=="是一样的;对String,里面的equals方法已经覆写了,只有当两个String表示的字符串一样时才返回true;

11楼的结果同理,因为Number 没有覆写Object类的equals方法,所以Number 类的equals方法还是与Object类的方法有同样的行为...

[此贴子已经被作者于2007-2-15 19:17:35编辑过]


----------------解决方案--------------------------------------------------------
楼上正解
----------------解决方案--------------------------------------------------------
以下是引用Eastsun在2007-2-15 16:14:33的发言:
很简单"=="的行为是确定的,就是比较两个引用是否指向同一个类,是就TRUE,否则false;
而equals是一个方法,他的行为是可以通过在子类中覆写父类的equals方法而改变的;

换句话说,equals的行为是由你自己去定义的,你想让它怎么着都行;

比如Object的equals方法就是调用"==",所以对Object类,equals与"=="是一样的;对String,里面的equals方法已经覆写了,只有当两个String表示的字符串一样时才返回true;

11楼的结果同理,因为Number 没有覆写Object类的equals方法,所以Number 类的equals方法还是与Object类的方法有同样的行为...

应该是在内存里面的同一个对象吧,不是类


----------------解决方案--------------------------------------------------------
呵呵,楼上说的对.
我的表述有问题.
----------------解决方案--------------------------------------------------------
楼上学java多久了
感觉挺厉害的
----------------解决方案--------------------------------------------------------
那肯定是错觉:)
学JAVA倒有一段时间了,暑假的时候开始的吧,快一年了.
不过我不是搞计算机的,编程纯粹是爱好,平时用的少,又完全自学,所以学的也慢.

平时就喜欢在技术论坛灌灌水,回回贴,这样也算学以致用了^0^
----------------解决方案--------------------------------------------------------

我也学了8 9个月了
进度挺快 就是基础不牢
所以现在下定决心 一定要把基础弄牢
又回来重新学


----------------解决方案--------------------------------------------------------

哦,ls是计算机系的么?


----------------解决方案--------------------------------------------------------
  相关解决方案