Java基础知识整理(三)- equals和==的区别

来源:互联网 发布:stylus rmx mac 编辑:程序博客网 时间:2024/05/16 00:25

Java中的数据类型分为2类:

1. 基本数据类型(8个基本数据类型)

        也称为原始数据类型,byte,short,char,int,long,float,double,boolean,他们之间比较时,应该使用 “==”,比较他们的值就可以了。

2. 引用数据类型

        其他的数据类型,都是引用数据类型。他们使用“==”比较时,比较的是他们的内存地址。

Java中所有类的基类是Object:

package java.lang;public class Object {    private static native void registerNatives();    static {        registerNatives();    }    public final native Class<?> getClass();    public native int hashCode();    public boolean equals(Object obj) {return (this == obj);    }    protected native Object clone() throws CloneNotSupportedException;    public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());    }    public final native void notify();    public final native void notifyAll();    public final native void wait(long timeout) throws InterruptedException;    public final void wait(long timeout, int nanos) throws InterruptedException {        if (timeout < 0) {            throw new IllegalArgumentException("timeout value is negative");        }        if (nanos < 0 || nanos > 999999) {            throw new IllegalArgumentException("nanosecond timeout value out of range");        }if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {    timeout++;}wait(timeout);    }    public final void wait() throws InterruptedException {wait(0);    }    protected void finalize() throws Throwable { }}

通过源码,可以看到,Object类中的equals()方法,默认就是使用“==”来判断的,在一些类中,都会重写这个方法,根据自己的需求去实现。

String的源码:

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


原创粉丝点击