1,equals方法
(1)什么時候需要重寫?
如果希望不同內存但相同內容的兩個對象equals時返回true,則需要重寫equals
(2)怎么重寫?
class A { public int i; pulic A(int i)//構造函數 {this.i=i; } public boolean equals(Object obj)//重寫equals {A aa=(A)obj; if(this.i==aa.i) return true; else return flase; } } public class testEquals{ public staric void main(String[] args){ A aa1=new A(10); A aa2=new A(10); System.out.println(aa1.equals(aa2)); }
}
(3)注意問題:
String類系統已經重寫equals了,不必再重寫;
另外區分equals和==
public class extendsPrivateTest {
public static void main(String[] args){
String str1=new String("China");
String str2=new String("China");
System.out.println(str1.equals(str2));
System.out.println(str1==str2);
String str3="China";
String str4="China";
System.out.println(str3.equals(str4));
System.out.println(str3==str4); } }
str1和str2放在堆里
true//equals已經被系統重寫
false
str3和str4是放在數據區,都是指向一個數據
true
true
2.toString方法
(1)為什么需要重寫toString?
Object類中的toString方法返回的是類的名字和該對象的哈希碼組成的一個字符串,例,A@deced
而我們實際想用System.out.printf(類對象名)輸出該對象的toStringd()方法返回的字符串不是上述的時,就必須重寫toSring方法。
(2)怎么重寫toString方法?
注意:為了實際需要,建議子類重寫從父類Object繼承的toString()方法
class Point{ private int i,j; puvlic Point(int i,int j){ this.i=i; this.j=j; } public String toString(){ return "["+i+","+j+"]"; } } public class testtoString{ public static void main(String[] args){ Point p1=new Point(1,3); System.out.println(p1); } }
