標籤:建議 rgs 成員變數 public new class package pack pre
Java常見對象Object類
public int hashCode() : 返回該對象的雜湊碼值。
注意:雜湊值是根據雜湊演算法計算出來的一個值,這個值和地址值有關,但是不是實際地址值。你可以理解成地址值。
package common_object;public class Demo extends Object{}package common_object;public class DemoTest { public static void main(String[] args) { Demo d = new Demo(); System.out.println(d.hashCode()); //1887400018 Demo d2 = new Demo(); System.out.println(d2.hashCode()); //285377351 }}
public final Class getclass() : 返回此Object的運行時類
Class類的方法:public String getName() : 以String 的形式返回此Class對象所表示的實體。
package common_object;public class Demo extends Object{}package common_object;public class DemoTest { public static void main(String[] args) { Demo d = new Demo(); Class c = d.getClass(); System.out.println(c.getName()); //common_object.Demo String str = new Demo().getClass().getName(); System.out.println(str); //common_object.Demo }}
public String toString() : 返回該對象的字串表示。
Integer類下的靜態方法:public static String toHexString(int i) : 把一個整數轉成一個十六進位表示的字串。
package common_object;public class Demo extends Object{}package common_object;public class DemoTest { public static void main(String[] args) { Demo d = new Demo(); System.out.println(d.hashCode()); //1887400018 System.out.println(d.getClass().getName()); //common_object.Demo System.out.println("-----------------------"); System.out.println(d.toString()); //[email protected] //toString() 方法的值等價於 //getClass().getName() + ‘@‘ + Integer.toHexString(hashCode()) //就等於 //this.getClass().getName() + ‘@‘ + Integer.toHexString(this.hashCode()) System.out.println("-----------------------"); System.out.println(d.getClass().getName() + ‘@‘ + Integer.toHexString(d.hashCode())); System.out.println(d.toString()); //[email protected] //[email protected] }}
這個資訊的組成我們講解了,但是這個資訊是沒有任何意義的,所以,建議所有的子類都重寫該方法。
把該類的所有成員變數的值組成返回即可。重寫的最終版方案就是自動產生toString()方法。
注意:直接輸出一個對象的名稱就是調用該對象的toString() 函數。
如何自動產生toString()方法。------- .java 程式介面上,點擊右鍵,選擇 Source (Alt + Shift + S),在選擇Generate toString...就可以了。
//重寫toString() 方法。package common_object;public class Demo extends Object{ private String name; private int age; public Demo() { super(); // TODO Auto-generated constructor stub } public Demo(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Demo [name=" + name + ", age=" + age + "]"; //這裡就是toString()方法的重寫。 } }package common_object;public class DemoTest { public static void main(String[] args) { Demo d = new Demo(); System.out.println(d.hashCode()); //1887400018 System.out.println(d.getClass().getName()); //common_object.Demo System.out.println("-----------------------"); System.out.println(d.toString()); //Demo [name=null, age=0] 在這裡改變 //toString() 方法的值等價於 //getClass().getName() + ‘@‘ + Integer.toHexString(hashCode()) //就等於 //this.getClass().getName() + ‘@‘ + Integer.toHexString(this.hashCode()) System.out.println("-----------------------"); System.out.println(d.getClass().getName() + ‘@‘ + Integer.toHexString(d.hashCode())); System.out.println(d.toString()); //[email protected] //Demo [name=null, age=0] 這裡也有改變 }}
public boolean equals(Object obj) : 指示其他某個對象是否與此對象“相等”。
這個方法,預設情況下比較的是地址值。比較地址值一般來說意義不大,所以我們又要重寫這個函數。
一般都是用來比較對象成員變數值是否相同。
重寫最終版可以利用 eclipse 自動產生。 ------- .java 程式介面上,點擊右鍵,選擇 Source (Alt + Shift + S),在選擇Generate hashCode() 和 equals()... 就可以了。
package common_object;public class Demo extends Object{ private String name; private int age; public Demo() { super(); // TODO Auto-generated constructor stub } public Demo(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) //另一種表示方法: //格式:對象名 instanceof 類名 //表示:判斷對象名是否是該類名一個對象 //if (!(obj instanceof Demo)) // return false; return false; Demo other = (Demo) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }}package common_object;public class DemoTest { public static void main(String[] args) { Demo d1 = new Demo("白",21); Demo d2 = new Demo("黑",20); System.out.println(d1.equals(d2)); // false }}
Java常見對象Object類中的個別方法