1. 程式人生 > >Java原始碼學習-String類的equals方法

Java原始碼學習-String類的equals方法

下面來自jdk中src/java/lang下的String類的equals方法原始碼,反斜線//後面的部分為個人註釋

public boolean equals(Object anObject) {
    if (this == anObject) { 
        return true;  //如果形參物件和當前物件引用相同地址,則認為他們相等,返回true	
    }  
    if (anObject instanceof String) { 
        String anotherString = (String)anObject; //如果是,強制型別轉化為String類  
        int n = count; //將當前String物件的長度賦值給變數n 
        if (n == anotherString.count) { //判斷當前String物件的長度與形參物件的長度是否相等,如果不等返回false
            char v1[] = value; //將當前String物件的字串的char[] 
            char v2[] = anotherString.value; //同上 
            int i = offset; //記錄開始位置 
            int j = anotherString.offset; //同上 
            while (n-- != 0) { //逐個比較兩字元陣列的各元素是否相同,若存在不同,返回false 
                if (v1[i++] != v2[j++]) 
                    return false; 
            } return true; //比較完畢後發現全部相同,返回true
        } 
    } return false; //如果所傳物件不滿足前兩個if語句,則返回false
}
上面用到了幾個變數,分別是count,value和offset,這幾個成員變數在String 類的開始處進行了宣告,如下
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence
{
    /** The value is used for character storage. */
    private final char value[];

    /** The offset is the first index of the storage that is used. */
    private final int offset;

    /** The count is the number of characters in the String. */
    private final int count;
 
    ... ...

通過本例加深了自己的兩點理解:

1. String型別物件不可變,通過其count,value,offset等成員變數的final修飾符可知。

2. 一個物件objA(類為Aclass),假設其存在private型別的成員變數f,private型別的變數在一般情況是不允許按照下面方式呼叫的:

例:objA.f

但如果此物件objA在另一個Aclass例項物件中被引用,則可以按照上述方式使用,所以equals方法中才有 anotherString.count 等類似語句。

相關推薦

Java原始碼學習-Stringequals方法

下面來自jdk中src/java/lang下的String類的equals方法原始碼,反斜線//後面的部分為個人註釋 public boolean equals(Object anObject) { if (this == anObject) {

Java原始碼學習-String的compareTo方法

下面來自jdk中src/java/lang下的String類的compareTo()方法原始碼,反斜線//後面的部分為個人註釋 public int compareTo(String anotherString) { int len1 = count; //當前

Java String equals()方法的實現

1、貼原始碼,暫且自行閱讀 public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject insta

Java學習——String常用方法

學習視訊地址:https://www.imooc.com/learn/110   1.常用函式 例項: 執行結果:   2.==於eqauls()的區別 ==: 判斷兩個字串在記憶體中首地址是否相同,即判斷是否是同一個字串物件 e

深入學習java原始碼之下StringBuilderappend方法

深入學習java原始碼之下StringBuilder類append方法 StringBuilder的append方法 StringBuilder sb = new StirngBuilder(); sb.append("a").append("b").append("c").append("

java String equals方法和==的比較

    最近在通過閱讀《深入理解Java虛擬機器——JVM特性與最佳實踐》這本書時,發現書中在介紹執行時常量池中有這樣一段話:“執行時常量池相對於Class檔案常量池的另外一個重要特徵是具備動態性,Java語言並要求常量一定只有編譯期才能產生,也就是並非預置入Class檔案中

Java面向物件-- String 常用方法及基本使用

首先來學習基本使用Jdk api chm文件: 點選 左上角-顯示:     1, char chartAt(int index) 返回指定索引處的char值 這裡的index 是從0開始的; package com.xuyigang1234.chp02.strin

Java原始碼String

基本的資料結構 /** * 基本的資料結構 */ /** The value is used for character storage. */ private final

JAVA原始碼學習--String

最近發四重新學習java的基礎,從基本型別以及裡面的各種方法開始看起,看的一本書《JAVA核心技術卷1,基礎知識》,這是第十版,講的JDK8的一些特性。 我在想我們建立物件的時候都是這樣進行建立的 People p = new People(); Int

JAVA學習(二) String使用equals方法和==分別比較的是什麽?(轉)

找到 基礎上 stirng print 大小 obj lis 分配 ret String使用的equals方法和==的區別 equals方法和==的區別 首先大家知道,String既可以作為一個對象來使用,又可以作為一個基本類型來使用。這裏指的作為一個基本類型來使用只是

javaString常用方法、屬性等

col clas equal ack length ++ ava eal rgs package Head18; public class java09 { public static void main(String[] args) { St

JAVA-初步認識-第十一章-object-equals方法

行修改 color 我們 兩個 例子 初步 是我 地方法 成了 一. 接下來介紹一個特殊的對象,學完繼承,多態,將要講到的,之前也接觸過。 之前談論的繼承體系子父類中,一直存在super()調用父類,父類中也有一個super()調用object。現在就是討論object對

Java面向對象-- String 常用方法及基本使用

for str news http clas substr 實例 div print 首先來學習基本使用Jdk api chm文檔: 點擊 左上角-顯示: 1, char chartAt(int index) 返回指定索引處的char值 這裏的index 是從0

Java學習——String

一、String的兩種例項化方式 1.直接賦值(用的最多,也最推薦) 2.通過構造方法 String str = "HelloWorld";//推薦使用 String str2 = new String("HelloWorld"); 二、字串相等比較

菜雞的Java課筆記 第十四 String 常用方法

/*String 類常用方法    將所有String類的常用方法全部記下來,包括方法名稱,引數作用以及型別    一個成熟的程式語言,除了它的語法非常完善之外,那麼也需要提供有大量的開發類庫    而需要知道的java

Java基礎-----String常用方法

String類的判斷功能 1、boolean equals(Object obj):比較字串的內容是否相同,區分大小寫。 2、boolean equalsIgnoreCase(String str):比較字串的內容是否相同,忽略大小寫。 3、boolean contains(

Java原始碼分析——String、StringBuffer、StringBuilder(二)——AbstractStringBuilder抽象

    在Java中,關於字串類分為兩種,一種是上篇部落格講的String類,即不可變字串類,另外一種則是可變字串類,即AbstractStringBuilder抽象類的子類,StringBuffer與StringBuilder類,其中的兩者的區別

JAVA語言中String的常用方法

String類的建立 String str = new String();// 建立 String str = new String("Hello World!");//初始化 "+"號運算子 既可以在String物件之間相加,也能加整形和浮點型數字(自動轉

JavaString方法整合

static String join(CharSequence delimiter, CharSequence… elements):返回一個新的字串,由CharSequence elements的副本組成,並附有指定的delimiter的delimiter static String join(CharS

Java String常用方法

Java String類常用方法 1.字串物件操作 2.字串物件修改 1.字串物件操作 方法 public int length():返回當前字串的長度 public char charAt(int