java.lang.Object类(JDK1.7)

1.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; //getClass().getName()是返回对象的全类名(包含包名),Integer.toHexString(hashCode()) 是以16进制无符号整数形式返回此哈希码的字符串表示形式。 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); } //垃圾回收,一般由 JVM 自动调用,一般不需要程序员去手动调用该方法。 protected void finalize() throws Throwable { } }

2.equal 的方法 

 public boolean equals(Object obj) {
        return (this == obj);
    }

可以看到,在 Object 类中,== 运算符和 equals 方法是等价的,都是比较两个对象的引用是否相等,从另一方面来讲,如果两个对象的引用相等,那么这两个对象一定是相等的。对于我们自定义的一个对象,如果不重写 equals 方法,那么在比较对象的时候就是调用 Object 类的 equals 方法,也就是用 == 运算符比较两个对象。我们可以看看 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;
    }

自定义Userbean 重写equals的方法,比较两个对象

public class UserBean {
	private String username;
	private String password;

	public UserBean() {

	}

	public UserBean(String username, String password) {
		this.username = username;
		this.password = password;

	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String toString() {
		return "UserBean [username=" + username + ", password=" + password + "]";
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) { 
			return true;
		}
		if (obj == null || !(obj instanceof UserBean)) {
			return false;
		}
		UserBean otherUserBean = (UserBean) obj;
		if (otherUserBean.getUsername().equals(this.username) && otherUserBean.getPassword().equals(this.password)) {
			return true;
		}

		return false;
	}

}

== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。

equals() : 它的作用也是判断两个对象是否相等(内容)
                 1,类没有覆盖equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。
                 2,类覆盖了equals()方法。一般,我们都覆盖equals()方法来两个对象的内容相等;若它们的内容相等,则返回true(即,认为这两个对象相等)。  

 3.hashCode 方法

 4. toString 方法

 5.getClass 和 instanceof  

  

  

原文地址:https://www.cnblogs.com/xiaofuzi123456/p/11340060.html