資源描述:
《重寫tostring和equals方法》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、重寫ToString和equals方法一、重寫toString()方法為什么要重寫toString()方法在Object類里面定義toString()方法的時候返回的對象的哈希code碼,這個haxicode碼不能簡單明了的表示出對象的屬性。所以要重寫toString()方法。當需要將一個對象輸出到顯示器時,通常要調(diào)用他的toString()方法,將對象的內(nèi)容轉(zhuǎn)換為字符串.java中的所有類默認都有一個toString()方法默認情況下System.out.println(對象名)或者System.out.println(對象名.toString
2、())輸出的是此對象的類名和此對象對應(yīng)內(nèi)存的首地址如果想自定義輸出信息必須重寫toString()方法注意事項1.必須被聲明為public2.返回類型為String3.方法的名稱必須為toString,且無參數(shù)4.方法體中不要使用輸出方法System.out.println()二、重寫equals()方法為什么要重寫equals()方法在Object類里面定義的equals比較的是對象的引用是否指向同一塊內(nèi)存地址。一般情況下比較兩個對象時比較他的值是否一致,所以要進行重寫。重寫之后是為了比較兩個對象的value值是否相等。特別指出,利用equal
3、s比較八大包裝對象(如int,float等)和String類(因為該類已重寫了equals和hashcode方法)對象時,默認比較的是值,在比較其它對象都是比較的引用地址。注意事項重寫equals必須注意:*1自反性:對于任意的引用值x,x.equals(x)一定為true*2對稱性:對于任意的引用值x和y,當x.equals(y)返回true,y.equals(x)也一定返回true*3傳遞性:對于任意的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也一定返回tru
4、e*4一致性:對于任意的引用值x和y,如果用于equals比較的對象信息沒有被修改,*多次調(diào)用x.equals(y)要么一致地返回true,要么一致地返回false*5非空性:對于任意的非空引用值x,x.equals(null)一定返回false一、示例1.重寫前面定義的“Person”類和“Student”類的toString及equals方法,并編程測試。程序如下:classPerson{inti;Person(){}Person(inti){this.i=i;}publicStringtoString(){return"我叫Mary";}p
5、ublicbooleanequals(Objectobj){Personp1=(Person)obj;if(this.i==p1.i)returntrue;elsereturnfalse;}}classStudentextendsPerson{intx,y;Student(intx,inty){this.x=x;this.y=y;}publicStringtoString(){return"我是計算機系計科09級學生";}publicbooleanequals(Objectobj){Students1=(Student)obj;if(this.i
6、==s1.i)returntrue;elsereturnfalse;}}publicclassTestPerson{publicstaticvoidmain(Stringargs[]){Personp1=newPerson(2);Personp2=newPerson(2);Students1=newStudent(3,4);Students2=newStudent(3,4);System.out.println(p1.equals(p2));System.out.println(s1.equals(s2));System.out.println(
7、p1);System.out.println(s1);}}運行結(jié)果:2.根據(jù)上面的程序,構(gòu)造“Teacher”類,繼承“Person”類,要求:(1)增加“職稱(String)”屬性;(2)具有和“Student”類類似的構(gòu)造重載方法;(3)重寫“Person”類的info()方法,增加“職稱”信息。程序如下:classPerson{Stringname;longid;intage;Person(){}Person(Stringname,longid,intage){this.name=name;this.id=id;this.age=age;}
8、voidinfo(){System.out.println("我的信息是:"+"姓名="+name+";"+"證件號="+id+";"+