java API(一)

equals方法:

我們經(jīng)常遇到過兩個對象的比較,判斷2個對象是否相等的情況,在python中,因為不是強(qiáng)類型語言,在比較基本數(shù)據(jù)類型的時候,我們一般用== 在比較對象的時候,根據(jù)對象的屬性判斷對象是否相等。
在java中也是,在比較對象的時候根據(jù)對象的屬性值來判斷,在java中,所有java類的超類是object(ClassObjectis the root of the class hierarchy. Every class has
Objectas a superclass. All objects, including arrays, implement the methods of this class.),object本身為我們提供了一些方法,為子類可以對object的方法進(jìn)行重寫。
equals方法:
object中equal方法,只是比較2個對象的內(nèi)存地址是否相等(內(nèi)部用==比較),如下:

1 package com.test;
 2 
 3 public class Equal_Demo {
 4     public static void main(String[] args){
 5         equal p1=new equal("tom");
 6         equal p2=new equal("tom");
 7         if(p1.equals(p2)){
 8             System.out.printf("相等");
 9         }else {
10             System.out.printf("不相等");
11         }
12     }
13 }
14 class  equal{
15     private String name;
16     public  equal(String name){
17         this.name=name;
18     }
19     public void show(){
20         System.out.printf("ok");
21     }
22 }

輸出:

image

object類實現(xiàn):

image

內(nèi)部實際上使用==來比較2個對象內(nèi)存地址是否相等。這個并不是我們想要的,因為有時候我們對2個對象的屬性值相等即可。比如上面的我們認(rèn)為對象的name屬性相等的話,就認(rèn)為這2個對象相等。

我們重寫equals方法。

1 package com.test;
 2 
 3 public class Equal_Demo {
 4     public static void main(String[] args)
 5         equal p1=new equal("tom");
 6         equal p2=new equal("tom");
 7         if(p1.equals(p2)){
 8             System.out.printf("相等");
 9         }else {
10             System.out.printf("不相等");
11         }
12     }
13 }
14 class  equal{
15     private String name;
16     public  equal(String name){
17         this.name=name;
18     }
19     public void show(){
20         System.out.printf("ok");
21     }
22     public boolean equals(Object obj){
23         if(obj==this){//this 是當(dāng)前被調(diào)用對象。如果對象的內(nèi)存地址相等的話,必然相等。
24             return true;
25         }
26         if(obj instanceof equal){
27         equal p=(equal) obj;//因為obj是Object 對象所以并不包含子類的字段,所以需要向下轉(zhuǎn)型。
28         if(this.name==p.name){//判斷字段的相等性.
29             return true;
30         }else {
31             return false;
32         }
33         }else {
34             return false;
35         }
36     }
37 }

注意:
在方法中當(dāng)前調(diào)用對象為this引用。
字段是當(dāng)前類的屬性,如上例子,object為父類所以無法調(diào)用子類的字段,如果想調(diào)用的話,需要類型轉(zhuǎn)換。
二:在Object中,也toString方法。Returns a string representation of the object. 默認(rèn)返回對象的內(nèi)存地址。

1 package test01;
 2 
 3 public class Tostring {
 4     public  static  void  main(String ...args){
 5         Check_Prin p1=new Check_Prin("tom","22");
 6         System.out.printf(p1.toString());
 7     }
 8 }
 9 
10 class Check_Prin{
11     private String age;
12     private String name;
13     public   Check_Prin(String name,String age){
14         this.name=name;
15         this.age=age;
16     }
17     public void  show(){
18         System.out.printf("PK");
19     }
20 } 

輸出結(jié)果:

image

輸出是對象的內(nèi)存地址。所以我們需要重寫Object的tostring方法。一般當(dāng)我們System的輸出打印對象的時候,會調(diào)用對象的tostring方法。如果對象的類沒有重寫這個方法,會調(diào)用父類的toString方法。

類似python 中的內(nèi)置方法str方法。在輸出字符串的時候,我們更像要得到的是對象的屬性信息。如下:

1 package test01;
 2 
 3 public class Tostring {
 4     public  static  void  main(String ...args){
 5         Check_Prin p1=new Check_Prin("tom","22");
 6         System.out.printf(p1.toString());
 7     }
 8 }
 9 
10 class Check_Prin{
11     private String age;
12     private String name;
13     public   Check_Prin(String name,String age){
14         this.name=name;
15         this.age=age;
16     }
17     public void  show(){
18         System.out.printf("PK");
19     }
20     public  String toString(){
21         return this.name+" "+this.age;
22     }
23 }

效果:

image

歡迎加入學(xué)習(xí)交流群569772982,大家一起學(xué)習(xí)交流。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,740評論 18 399
  • java筆記第一天 == 和 equals ==比較的比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量...
    jmychou閱讀 1,656評論 0 3
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,265評論 0 62
  • 文章作者:Tyan博客:noahsnail.com | CSDN | 簡書 CHAPTER3 Method...
    SnailTyan閱讀 778評論 1 4
  • 參加了,不講就出局,當(dāng)時參加的時候就在想,這么簡單的事情,我一定能做到。等到自己去搜索材料的時候才發(fā)現(xiàn),所有事情做...
    未來7年沙姐姐閱讀 135評論 0 2

友情鏈接更多精彩內(nèi)容