黑马程序员技术交流社区

标题: 小问题 [打印本页]

作者: 毕博    时间: 2012-4-21 19:50
标题: 小问题
==与equals有什么不同吗?  判断的都是对象是否指向统一内存空间吗  
作者: 金兴    时间: 2012-4-21 20:11
这问题已经在群里问过很多遍了  ,楼上可以搜索一下...
作者: 黑马罗坚    时间: 2012-4-21 20:20
equals 是Object类的方法在不被覆盖的情况下跟==号的作用是一样的都是比较内存空间地址是否相等
并返回值

这个方法只有覆盖了才能体现它的意义 用来比较一个对象中的某个是否跟定外一个对象中的那个属性的值相等 而且JAVA设计这个方法也是希望被我们覆盖的
基本数据类型一般都覆盖了这个方法 所以"safd".equals("sf")比较的就不是内存空间的值是否想到了 而是它们的值是否相等
如比较Demo类d对象的 age是否和d1对象的值相等
public class Demo{
        private int age;
        public Demo(int age){
        this.age=age;
        }
        public boolean equals(Object obj){
                if(obj.getClass()==this.getClass()){
                      Demo d=new Demo();
                      return d.age==this.age;
                 {
                 return false;
        }
}
class De{
    public static void main(String args[]){
         Demo d=new Dmoe();
         Demo d1=new Demo();
         System.out.println(d.equals(d1));
    }
}
作者: 徐鑫    时间: 2012-4-21 20:34
=操作符专门用来比较变量的值是否相等。比较好理解的一点是:
int   a=10;
int   b=10;
则a==b将是true。
但不好理解的地方是:
String   a=new   String( "foo ");
String   b=new   String( "foo ");
则a==b将返回false。

对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身。a和b都使用了new操作符,意味着将在内存中产生两个内容为 "foo "的字符串,既然是“两个”,它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的值,所以使用 "== "操作符,结果会是false。诚然,a和b所指的对象,它们的内容都是 "foo ",应该是“相等”,但是==操作符并不涉及到对象内容的比较。
对象内容的比较,正是equals方法做的事。
作者: 黑马—王宁    时间: 2012-4-21 20:46
1.对于基本数据类型,只有==,没有equals(),所以很明显值相等就为true。
2.对于字符串,==指比较两者的内存地址,equals()则重写了Object类的equals(),比较的是内容。
如果字符串值相等且都指向同一块内存地址,那么==和equals()结果就没区别了。
3.对于实例对象而言,==比较的依然是内存地址,
而equals()默认重写Object类的equals()方法(比较地址)。但是一般我们会自己重写equals(),让它比较值是否相等。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2