==和equals的区别

来源:互联网 发布:node buffer 编辑:程序博客网 时间:2024/06/05 14:36

一。理解==和equal的区别

1.==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同
2.==是指对内存地址进行比较,equals()是对字符串的内容进行比较
3.==指引用是否相同 ,equals()指的是值是否相同

二。Object与String
1)java的Object类中
    public boolean equals(Object obj) {        return (this == obj);    }
    判断2个对象是否equal实际上判断他们是否==,即判断了值,还判断了内存空间

2) java的String类中

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

如果一个类没有自己定义equals方法,它默认的equals方法(从Object类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果


附录:

1)Integer与int的拆箱与装箱

首先看下源代码:

    public static Integer valueOf(int i) {        if (i >= IntegerCache.low && i <= IntegerCache.high)            return IntegerCache.cache[i + (-IntegerCache.low)];        return new Integer(i);    }
在装箱时,将-128<=i1<=127范围之内的数据打包成缓存里的Integer对象了,由于不用new,所以这个区间里的值用直接=赋值方法得到的变量地址就是同一个,而超出这个范围的数值就会new一个Integer对象出来,用==运行符来计算,怎么也不可能为true。

Integer a=1;Integer b=1;Integer c=150;Integer d=150;System.out.println(a==b);//trueSystem.out.println(c==d);//false






原创粉丝点击