Java連載57-equals重寫、finalize方法、hashCode方法​

来源:https://www.cnblogs.com/ruigege0000/archive/2019/12/04/11980490.html

一、關於java語言中如何比較兩個字元串是否一致 1.不能使用雙等號來比較兩個字元串是否相等,應該使用equals方法進行比較,如例子 package com.bjpowernode.java_learning; ​ public class D57_1_ { public static void ...


一、關於java語言中如何比較兩個字元串是否一致

1.不能使用雙等號來比較兩個字元串是否相等,應該使用equals方法進行比較,如例子

 

package com.bjpowernode.java_learning;

​

public class D57_1_ {

  public static void main(String[] args){

    String s1 = new String("ABC");

    String s2 = new String("ABC");

    System.out.println(s1 == s2);//false,這是因為這個兩個對象作比較,比較的是對象的地址

    System.out.println(s1.equals(s2));//equals方法才是比較字元串裡面的值

   

  }

}

2.重寫類的equals可以達到判斷對象內部的是否一致的效果,而不是使用類原來的對比地址的作用

 

package com.bjpowernode.java_learning;

​

public class D56_2_equalsMethodAnalysis {

  public static void main(String[] args) {

    Object o1 = new Object();

    Object o2 = new Object();

    boolean b1 = o1.equals(o2);

    System.out.println(b1);

    Star56 s1 = new Star56(100,"xiaoming");

    Star56 s2 = new Star56(100,"xiaoming");

    System.out.println(s1.equals(s2));

    //這樣比較出來的是false,因為比較的是兩個對象的記憶體地址,但是這樣顯然是不符合我們的預期

    //其實我們想要比較的是兩個對象裡面的內容是不是一致的。於是我們重寫

   

  }

}

class Star56{

  int id;

  String name;

  public Star56(int id,String name) {

    this.id = id;

    this.name = name;

  }

  public boolean equals(Object obj) {

    if(obj instanceof Star56) {//強制類型轉換,必須先做判斷,二者是否存在繼承關係

      Star56 s = (Star56)obj;

      if (s.id == this.id && s.name.equals(this.name)) {

        return true;

      }

    }

    return false;

  }

}

​

二、finalize方法、hashCode方法​

1.finalize方法每個java對象都有

2.finalize方法不需要程式員去調用,由系統調用

3.java對象如果沒有更多的引用去指向它,則該java對象成為垃圾數據,等待垃圾回收器的回收,垃圾回收器在回收這個java對象之前那會自動調用該對象的​finalize方法。

finalize方法是該對象啊馬上就要被回收了,例如:需要釋放資源,則可以在該方法中釋放。

 

package com.bjpowernode.java_learning;

​

public class D57_2_MethodOfFinalize {

  public static void main(String[] args) {

    Person57 p1 = new Person57();

    p1 = null;//沒有引用在指向它,等待被回收

    //程式員只能去“建議”垃圾回收器回收垃圾

    System.gc();//這個就是系統

   

    //使用hashcode方法,返回的是該對象的哈希值,java對象的記憶體地址經過哈希演算法得到的int類型的值

    Person57 p2 = new Person57();

    System.out.println(p2.hashCode());

   

    //使用clone()方法,可以對一個對象進行複製一份,防止把原來的對象內容給破壞了

  }

}

class Person57{

  //重寫Object方法中的fianlize方法

  public void fianlize() throws Throwable{//至於為什麼這麼寫,暫時不用知道,因為源碼中就是這樣寫的,我們重寫裡面的函數體就行了

    System.out.println(this + "馬上就要被回收了");

    //可以重寫finalize方法,比如裡面重寫給對象指定引用,以此來緩解,對象要被垃圾回收器回收

  }

}

 

三、源碼:

D57_1_CompareString.java

D57_2_MethodOfFinalize.java

地址:

https://github.com/ruigege66/Java/blob/master/D57_1_CompareString.java

https://github.com/ruigege66/Java/blob/master/D57_2_MethodOfFinalize.java

2.CSDN:https://blog.csdn.net/weixin_44630050(心悅君兮君不知-睿)

3.博客園:https://www.cnblogs.com/ruigege0000/

4.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料

 

 


您的分享是我們最大的動力!

更多相關文章
  • 話不多說,先上圖 背景: 微信聊天,經常會遇見視頻發不了,嗯,還有聊天不方便的問題,於是我就自己買了伺服器,部署了一套可以直接在微信打開的網頁進行聊天,這樣只需要發送個url給朋友,就能聊天了! 由於自己無聊弄著玩的,代碼比較粗糙,各位多指正! 1、首先安裝SignalR,這步我就不做過多說明瞭 安 ...
  • String >是一個對象 字元串可以看成是字元組成的數組, 但是js中沒有字元類型 字元是一個一個的, 在別的語言中字元用一對單引號括起來 在js中字元串可以使用單引號也可以使用雙引號 因為字元串可以看成是數組, 所以, 可以通過for迴圈進行遍歷 字元串特性: 不可變性, 字元串的值是不能改變 ...
  • 常見 Uncaught TypeError: Cannot read property 'trim' of undefined 報錯原因及解決方案 ...
  • 格式化後的指定格式的日期和時間,封裝一個函數 function getDate() { var dt = new Date(); var year = dt.getFullYear(); var month = dt.getMonth(); var date = dt.getDate(); var ...
  • 探索 Reflect.apply 與 Function.prototype.apply 的區別 眾所周知, ES6 新增了一個全局、內建、不可構造的 對象,並提供了其下一系列可被攔截的操作方法。其中一個便是 了。下麵探究下它與傳統 ES5 的 之間有什麼異同。 函數簽名 MDN 上兩者的函數簽名分別 ...
  • 準備 部署項目的細節可以看這個,傳送門 "Centos 7部署Laravel項目" 主機IP:192.168.10.17 演示 部署Deploy 額,剛發現Laravel版本竟然是6.6了,迭代很快呀。 修改配置 設置Nginx config配置 重啟下nginx 項目在虛擬機上,還要配置下win的 ...
  • # 背景 簡單工廠模式是很多程式員學習的第一個設計模式,因為其不但原理簡單而且易於上手,在日常工作的代碼中也常有體現。今天分享一個基於實現“加”、“減”、“乘”、“除”計算器的需求基於簡單工廠模式來實現。 # 錯誤示範 在學習簡單工廠模式之前,遇到這種需求我是這樣實現的: public static ...
  • 概述 java.io.File 類是文件和目錄路徑名的抽象表示,主要用於文件和目錄的創建、查找和刪除等操作。 構造方法 1.public File(String pathname) :通過將給定的路徑名獲得File對象 2.public File(String parent, String chil ...
一周排行
  • 微信公眾號: "Dotnet9" ,網站: "Dotnet9" ,問題或建議: "請網站留言" , 如果對您有所幫助: "歡迎贊賞" 。 .NET CORE(C ) WPF 抽屜式菜單 閱讀導航 1. 本文背景 2. 代碼實現 3. 本文參考 4. 源碼 1. 本文背景 使用簡單動畫實現抽屜式菜單 ...
  • 在上面abp(net core)+easyui+efcore實現倉儲管理系統——ABP WebAPI與EasyUI結合增刪改查之八(三十四) 文章的學習之後。我們通過前面的八篇文章已經學習了通過WebAPI介面與控制器去實現新增、刪除與修改功能。接下來,我們要在控制器中實現查詢功能。 ...
  • 1.選中項目-->屬性-->生成-->選中 XML文檔文件(xml路徑和該項目相同) 2.選擇生成序列化程式集:自動/開 ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/7640873.html,記錄一下學習過程以備後續查用。 一、引言 從今天開始我們開始講結構型設計模式,結構型設計模式有如下幾種:適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式。 創建型設 ...
  • C 中 ConfigureAwait 相關答疑FAQ 在前段時間經常看到園子里有一些文章討論到 ConfigureAwait,剛好今天在微軟官方博客看到了 "Stephen Toub" 前不久的一篇答疑 ConfigureAwait 的一篇文章,想翻譯過來。 原文地址:https://devblog ...
  • 想要實現二維數組中根據某個欄位排序,一般可以通過數組迴圈對比的方式實現。這裡介紹一種更簡單的方法,直接通過PHP函數實現。array_multisort() :可以用來一次對多個數組進行排序,或者根據某一維或多維對多維數組進行排序。詳細介紹可參考PHP手冊:https://www.php.net/m ...
  • 常用的軟體: 播放器: cloundMusic(網易雲音樂) https://music.163.com/#/download PotPlayer(一款強大的視頻播放器) https://daumpotplayer.com/download/ ACDsee(ACDsee圖片編輯器免費版) https ...
  • 發現問題 在一次偶然中,在爬取某個網站時,老方法,打開調試工具查看請求方式,請求攔截,是否是非同步載入,不亦樂乎,當我以為這個網站非常簡單的時候,發現二級網頁的地址和源碼不對應 Ajax非同步載入?源碼也是這樣的 而且這些鏈接直... ...
  • 準備年後要跳槽,所以最近一直再看面試題,並且把收集到的面試題整理了以下發到博客上,希望對大家有所幫助。 首先是集合類的面試題 1. HashMap 排序題,上機題。 已知一個 HashMap<Integer,User>集合, User 有 name(String)和 age(int)屬性。請寫一個方 ...
  • JVM體繫結構圖 Native Interface(本地介面) Java本地介面(Java Native Interface (JNI))允許運行在Java虛擬機(Java Virtual Machine (JVM))上的代碼調用本地程式和類庫,或者被它們調用,這些程式和類庫可以是其它語言編寫的,比 ...
x