1. 程式人生 > >equals和==的比較、單例模式,餓漢式,飽漢式

equals和==的比較、單例模式,餓漢式,飽漢式

最近發現自己學習能力變慢了,想來想去還是發現是因為自己Java基礎沒有打紮實,接下來的一系列文章將主要記錄自己對於Java的最基礎知識點的學習.

一.equals和==的比較 

先看例子:

複製程式碼
package com.amos;
/**
 * @ClassName: EqualTest
 * @Description:Java中的equal和==的比較
 * @author: amosli
 * @email:[email protected]
 * @date Apr 10, 2014 1:14:10 AM
 */
public class EqualTest {
    public static
void main(String[] args) { int a = 1; float b = 1.0f; System.out.println(a == b);// true String c = new String("hi_amos"); String d = new String("hi_amos"); System.out.println(c == d);// false System.out.println(c.equals(d));// true } }
複製程式碼

Java中判斷兩個變數是否相等主要有兩種判方式:一種是利用==運算子,另一種是利用equals方法來判斷兩者是否相同.

1).當使用==來判斷兩個變數是否相等時,如果兩個變數是基本型別變數,且都是數值型別,不要求資料型別嚴格相同,只要兩個變數的值相等,那麼將返回true.

2).如果對於兩個引用型別變數,它們必須指向一個物件時,==判斷才會返回true.==不可用於比較型別上沒有父子關係的兩個物件.

如上可以解釋同樣一new String時,==判斷兩者是否相同返回的是false,而equals返回的是true.

equals方法針對的String類,檢視其原始碼,可以發現其實equals只能算是==的一種特例.如下面原始碼所示:

複製程式碼
  public boolean equals(Object anObject) {
        
if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
複製程式碼

equals方法實際上一開始就呼叫了==判別式,然後再判斷其進一步值是否正確.

二.java中的單例模式

單例模式的特點:1、單例類只能有一個例項。  2、單例類必須自己自己建立自己的唯一例項。  3、單例類必須給所有其他物件提供這一例項。

餓漢式:起初不賦值

複製程式碼
package com.amos;
/** 
* @ClassName: Singleton 
* @Description: Java中最常見的單例模式
* @author: amosli
* @email:[email protected]
* @date Apr 10, 2014 1:12:00 AM  
*/
public class Singleton {
    public static Singleton instance;
    public static synchronized Singleton getSingleton() {
        if (instance == null) {
            instance = new Singleton();
        }
       return instance;
    }
    
    //將構造方法私有化
    private Singleton() {
    }
    
    public static void main(String[] args) {
        
        Singleton singleton = Singleton.getSingleton();
        Singleton singleton2 = Singleton.getSingleton();
        System.out.println(singleton==singleton2);//true
        
        String string = new String("hi_amos");
        String string2 = new String("hi_amos");
        System.out.println(string==string2);//false
    }
}
複製程式碼

 飽漢式:起初就賦好值了

複製程式碼
public class Singleton {
    public static Singleton instance=new Singleton();
    //飽漢式
    public static Singleton getSingleton() {
        return instance;
    }
    //將構造方法私有化
    private Singleton() {
    }
    
    public static void main(String[] args) {
        
        Singleton singleton = Singleton.getSingleton();
        Singleton singleton2 = Singleton.getSingleton();
        System.out.println(singleton==singleton2);//true
        
        String string = new String("hi_amos");
        String string2 = new String("hi_amos");
        System.out.println(string==string2);//false
    }
}
複製程式碼

相關推薦

equals==的比較模式,,

最近發現自己學習能力變慢了,想來想去還是發現是因為自己Java基礎沒有打紮實,接下來的一系列文章將主要記錄自己對於Java的最基礎知識點的學習. 一.equals和==的比較  先看例子: package com.amos; /** * @ClassName:

20設計模式模式-

import java.io.Serializable; /** * 餓漢式-單例模式 * 實現Serializable介面,使其支援序列化與反序列化 */ public class HungrySingleton implements Serializable {

模式--懶漢多線程以及多線程下改進

desc 懶漢 http ret locker syn bubuko 線程 info 代碼註釋有介紹 package singleton; /** * @author: ycz * @date: 2018/12/24 0024 22:15 * @descripti

模式--(按需建立)懶漢(多執行緒以及多執行緒下改進)

程式碼註釋有介紹,(排版過於難受,下次用md排完再傳上來) package singleton; /** * @author: ycz * @date: 2018/12/24 0024 22:15 * @description: 懶漢模式 */ public class SingleTon1

java的執行緒安全模式JVM記憶體結構等知識學習整理

知其然,不知其所以然 !在技術的海洋裡,前路漫漫,我一直在迷失著自我。 歡迎訪問我的csdn部落格,我們一同成長! “不管做什麼,只要堅持下去就會看到不一樣!在路上,不卑不亢!” 在下面的題目來自於我要加的一個QQ群,然後要加這個QQ群

設計模式-模式-懶漢式

單例模式(Singleton pattern)一個在設計模式中比較簡單的模式,我們常說的餓漢式和懶漢式是最常舉例的兩種寫法。 如下 餓漢式: public class Singleton { private static final Singleton sin

8:selfparent模式

self和parent的用法 self:本類,自身 parent:父類 使用場景: 首先請明確區分類和物件; 在使用本類/父類的,靜態屬性、方法時,會用到; self 在本類中使用,用於引用自身的靜態屬性和方法; parent 在子類中使用,用於引用父類

C++之智慧指標普通指標模式兩種實現

1  問題 實現c++的單例模式,這裡測試分別寫了通過智慧指標返回物件和普通返回指標     2  程式碼測試 include <iostream> #include <mutex> #include <m

利用c++的privatestatic實現模式

精髓就是 將建構函式設定為private屬性,並且將複製建構函式和賦值建構函式也設定為private屬性,這樣的話,就無法在外部建立物件,所以此時還需要一個public的函式:getHumanInterface(),這個函式來呼叫private屬性的建構函式來生成我們需要的物件,並且將這個物

模式

1、定義:單例模式(Singleton),保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。 2、什麼時候用呢? 資源共享的情況下     應用程式 的日誌應用,一般都用單例模式實現,這一般是由於共享的日誌檔案一直處於開啟狀態,因為只能有

設計類模式

1.請設計一個類,該類只能在堆上建立物件     方法:將類的建構函式和拷貝建構函式宣告為私有,防止別人呼叫拷貝在棧上生成物件                提供一個靜態的成員函式,在該靜態成員函式中完成堆物件的建立 class heaponly { public:

62模式

單例模式 單例模式:程式執行時,讓某個類在記憶體中只有一個物件,即讓一個類只能建立一個物件。一般分為懶漢式和餓漢式 餓漢式 有三步: 構造方法私有化 建立當前類物件 對外提供公共的訪問方法將SingletonHungary物件暴露給外部 package co

2模式(內部類的實現方式)

package demo; /** * Created by sunyifeng on 17/10/19. */ public class MyObject { // 內部類 priva

設計模式-原型模式模式

原型模式: 該模式用於克隆物件,有2種方式 淺克隆(不復制引用型別)深克隆(將值型別、引用型別均複製) C#中提供了MemberwiseClone()方法用於淺克隆和ICloneable介面用於實

Java基礎筆記9——反射Junit註解模式

Java基礎筆記9 十五、反射 通過獲取指定類的Class資訊,剖析該類具有的屬性、方法、構造方法等等資訊。這個過程就是反射的過程。 剖析類——得到類內部資訊來實現特定功能。 能夠實現解耦操作。 Class — 代表位元組碼的類 — 代表類的類——反射的核心 Field — 代表屬性的類 C

14.設計模式模式介面卡模式

設計模式設計模式|菜鳥教程1.什麼是設計模式(Design Patterns)?你用過哪種設計模式?用在什麼場合2.你知道哪些商業級設計模式?3.哪些設計模式可以增加系統的可擴充套件性4.除了單例模式,你在生產環境中還用過什麼設計模式?5.寫 Singleton 單例模式6.

設計模式(Java)-003-模式-

餓漢式(執行緒安全、呼叫效率高、但是不能延遲載入) 1.執行緒安全:在類載入時完成物件的建立 2.呼叫效率高:getInstance沒有任何同步限制 3.不能延遲載入:正是因為在類載入時就完成了

設計模式模式-&懶漢式

定義:保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。 Java中單例模式定義:“一個類有且僅有一個例項,並且自行例項化向整個系統提供。” 通過單例模式可以保證系統中一個類只有一個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。

模式模式

單例模式建立方式有以下幾種方式: 餓漢模式 懶漢模式 註冊式模式 列舉式模式 序列化模式   1.餓漢模式 在類載入時初始化,也是利用類載入執行緒安全的特性確保了單例例項化的執行緒安全。 package com.kancy.pattern.single;

模式之原型模式

原型模式:物件的屬性的完全複製,包括基本型別屬性和引用型別的物件的屬性的安全複製。 複製的方式可劃分為: 淺複製:一般通過clone實現,引用型別的屬性複製的是引用,而不是新的物件。原型物件需要實現java.lang.Cloneable。 深複製: 可以通過手動進行set賦值,引用物