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