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

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;
    }


你可能感兴趣的:(java,基础,equals)