欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Object類toString()和equals()方法使用解析

 更新時(shí)間:2020年02月26日 12:45:21   作者:遍唱陽(yáng)春  
這篇文章主要介紹了Object類toString()和equals()方法使用解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

我們知道,Object類是所有類的父類,因此也被稱為根類、祖先。那么,我們就來(lái)看一看Object類的最常用的兩個(gè)方法是如何用的。

1.toString方法:

Object類的toString()方法默認(rèn)返回的是對(duì)象地址值,如果某個(gè)類的toString()方法返回的不是對(duì)象地址值,則說(shuō)明這個(gè)類重寫(xiě)了toString()方法。

public class Test5 {
  public static void main(String[] args) {
    Person p1=new Person();
    System.out.println(p1.toString());
    //沒(méi)有重寫(xiě)toString()方法,返回的是對(duì)象的地址值 cn.itcast.Person@3feba861
  }
}

接下來(lái)我們重寫(xiě)Person的toString()方法

public class Person {
  private String name;
  private int age;

  //重寫(xiě)toString()方法
  @Override
  public String toString() {
    return "姓名: "+name+" 年齡:"+age;
  }

  public Person(){

  }
  public Person(String name, int age) {
    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;
  }
}

再來(lái)看看toString()方法返回的值:

public class Test5 {
  public static void main(String[] args) {
    Person p1=new Person();
    System.out.println(p1.toString());
    //重寫(xiě)了toString()方法,返回的是方法的返回值
    Person p2=new Person("aaa",18);
    System.out.println(p2.toString());
//    姓名: null 年齡:0
//    姓名: aaa 年齡:18
  }
}

2.equals方法:

equals()方法的源碼如下所示:

public boolean equali(Object obj){
 return this==obj;
}

因?yàn)?== 比較的是對(duì)象的地址值,所以O(shè)bject類的equals()默認(rèn)比較的是地址值,需要重寫(xiě)才有意義。具體如何重寫(xiě),就看我們比較兩個(gè)對(duì)象是否相同的依據(jù)是什么了。

舉個(gè)例子:我們規(guī)定,如果兩個(gè)人的姓名和年齡都一樣,那么兩個(gè)人相同。

  //重寫(xiě)Person類的equals()方法
  @Override
  public boolean equals(Object obj) {
    return this.name==((Person)obj).name&&this.age==((Person)obj).age;
  }

再來(lái)測(cè)試一下equals()方法:

public class Test5 {
  public static void main(String[] args) {  
    Person p3=new Person("aa",21);
    Person p4=new Person("aa",23);
    Person p5=new Person("bb",21);
    Person p6=new Person("aa",21);
    System.out.println(p3.equals(p4)); //false
    System.out.println(p3.equals(p5)); //false
    System.out.println(p3.equals(p6)); //true
  }
}

equals()方法的注意事項(xiàng):

(1)除了用a.equals(b)這個(gè)寫(xiě)法之外,也可以用Objects.equals(a,b),作用是一樣的。

(2)equals方法空指針安全,即容忍空指針。即equals()方法中的參數(shù)可以有null,返回值永遠(yuǎn)為false。

(3)null不可以調(diào)用方法,所以若a為空,則不能調(diào)用a.equals()方法,否則會(huì)出現(xiàn)NullPointERException.正因?yàn)槿绱?,我們一般將常量或已知非空的?duì)象放在前面,即寫(xiě)成"aa".equals(str)而不是str.equals("aa").

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot實(shí)現(xiàn)License認(rèn)證(只校驗(yàn)有效期)的詳細(xì)過(guò)程

    SpringBoot實(shí)現(xiàn)License認(rèn)證(只校驗(yàn)有效期)的詳細(xì)過(guò)程

    License也就是版權(quán)許可證書(shū),一般用于收費(fèi)軟件給付費(fèi)用戶提供的訪問(wèn)許可證明,這篇文章主要介紹了SpringBoot實(shí)現(xiàn)License認(rèn)證(只校驗(yàn)有效期),需要的朋友可以參考下
    2024-04-04
  • Java實(shí)現(xiàn)多文件壓縮打包的方法

    Java實(shí)現(xiàn)多文件壓縮打包的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)多文件壓縮打包的方法,結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)zip文件壓縮與解壓縮相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • Java 二分查找的實(shí)現(xiàn)及圖例解析

    Java 二分查找的實(shí)現(xiàn)及圖例解析

    這篇文章主要介紹了Java 二分查找的實(shí)現(xiàn),幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • Java實(shí)現(xiàn)文件的加密解密功能示例

    Java實(shí)現(xiàn)文件的加密解密功能示例

    這篇文章主要介紹了Java實(shí)現(xiàn)文件的加密解密功能,結(jié)合具體實(shí)例形式詳細(xì)分析了java針對(duì)文件的讀取、判斷、加密、解密等相關(guān)步驟與操作技巧,需要的朋友可以參考下
    2017-10-10
  • springboot中server.ssl.key-store配置路徑的問(wèn)題小結(jié)

    springboot中server.ssl.key-store配置路徑的問(wèn)題小結(jié)

    這篇文章主要介紹了springboot中server.ssl.key-store配置路徑的問(wèn)題,文中還記錄了Spring Boot SSL(https)實(shí)例,介紹在web程序中使用自簽名的SSL(HTTPS)證書(shū)及創(chuàng)建SSL認(rèn)證,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 一文搞懂Java中對(duì)象池的實(shí)現(xiàn)

    一文搞懂Java中對(duì)象池的實(shí)現(xiàn)

    池化并不是什么新鮮的技術(shù),它更像一種軟件設(shè)計(jì)模式,主要功能是緩存一組已經(jīng)初始化的對(duì)象,以供隨時(shí)可以使用。本文將為大家詳細(xì)講講Java中對(duì)象池的實(shí)現(xiàn),需要的可以參考一下
    2022-07-07
  • MyBatis中#和$的區(qū)別小結(jié)

    MyBatis中#和$的區(qū)別小結(jié)

    ${} 和 #{} 都是 MyBatis 中用來(lái)替換參數(shù)的,它們都可以將用戶傳遞過(guò)來(lái)的參數(shù),替換到 MyBatis 最終生成的 SQL 中,但它們區(qū)別卻是很大的,接下來(lái)我們一起來(lái)看
    2023-09-09
  • spring初始化源碼之關(guān)鍵類和擴(kuò)展接口詳解

    spring初始化源碼之關(guān)鍵類和擴(kuò)展接口詳解

    Spring就是一個(gè)大工廠,可以將所有對(duì)象的創(chuàng)建和依賴關(guān)系的維護(hù)交給Spring管理,下面這篇文章主要給大家介紹了關(guān)于spring初始化源碼之關(guān)鍵類和擴(kuò)展接口的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Spring探秘之如何妙用BeanPostProcessor

    Spring探秘之如何妙用BeanPostProcessor

    BeanPostProcessor也稱為Bean后置處理器,它是Spring中定義的接口,在Spring容器的創(chuàng)建過(guò)程中會(huì)回調(diào)BeanPostProcessor中定義的兩個(gè)方法,這篇文章主要給大家介紹了關(guān)于Spring探秘之如何妙用BeanPostProcessor的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • java計(jì)算日期相差天數(shù)的4種簡(jiǎn)單方法舉例

    java計(jì)算日期相差天數(shù)的4種簡(jiǎn)單方法舉例

    最近在工作中遇見(jiàn)一個(gè)小需求,要求計(jì)算兩個(gè)日期之間相差幾天,下面這篇文章主要給大家介紹了關(guān)于java計(jì)算日期相差天數(shù)的4種簡(jiǎn)單方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06

最新評(píng)論