java 中 equals 与 == 的区别

来源:互联网 发布:java web面试题 编辑:程序博客网 时间:2024/06/01 09:59

1.==

==  是一个运算符,用于比较 两个基本数据类型(内置数据类型)的值是否相等,或 比较两个引用型变量是否指向堆中的同一个内存地址,即是引用同一个对象。   
public class c {public static void main(String[] args) {int a = 12;int b = 12;String c = new String("abc");String d = new String("abc");System.out.println( a == b );   // 输出true ,== 运算符可以计较两个基本数据类型的值是否相等 System.out.println( c == d );   // 输出false ,对象用==比较的是:字符串变量中存放的 是否 是相同的引用(地址),而不是判断值相等System.out.println( c.equals(d)); //输出true , 判断 字符串对象的值是否相等 应使用 equals() 方法}}



2.equals

1.equals()  Java 中所有的类都继承Object这个超类,在Object类中定义了一个equals方法,这个方法的初始行为是比较对象的内存地址,Object类中的equals方法如下:
 boolean equals(Object  o){     return  this==o;}
在java类库中一些类重写了equals方法,如String,所以String对象不在是比较内存地址了,而是比较其中的值,String类中的equals方法如下:
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方法,比较的是内存地址。

原创粉丝点击