原始碼看JAVA 二 String類

2021-09-11 11:34:46 字數 1943 閱讀 8811

1、儲存,char字元陣列

private final char value;
2、初始化與複製

可見建立string是傳遞物件的引用,char拷貝陣列的值

public string(string original) 

public string(char value)

public string(char value, int offset, int count)

if (count < 0)

// note: offset or count might be near -1>>>1.

if (offset > value.length - count)

this.value = arrays.copyofrange(value, offset, offset+count);

}

3、字串複製

複製當前字串的子串到目標字串

public void getchars(int srcbegin, int srcend, char dst, int dstbegin) 

if (srcend > value.length)

if (srcbegin > srcend)

system.arraycopy(value, srcbegin, dst, dstbegin, srcend - srcbegin);

}

4、equals、contentequals

先比較長度,再逐一比較字串中的char是否一致,不一致則直接返回false

public boolean equals(object anobject) 

if (anobject instanceof string)

return true;}}

return false;

}public boolean contentequals(charsequence cs)

} else

}// argument is a string

if (cs instanceof string)

// argument is a generic charsequence

char v1 = value;

int n = v1.length;

if (n != cs.length())

for (int i = 0; i < n; i++)

}return true;

}

5、hashcode

字串不一致的hashcode可能一致

public int hashcode() 

hash = h;

}return h;

}

hashcode一致的情況

char chars1 = new char ;

char chars2 = new char ;

string str1 = new string(chars1);

string str2 = new string(chars2);

system.out.println(str1.hashcode());

system.out.println(str2.hashcode());

system.out.println(str1.hashcode() == str2.hashcode());

6、jdk8引入的字串合併方法

public static string join(charsequence delimiter, charsequence... elements) 

return joiner.tostring();

}

java 原始碼學習1 String

1 計算hashcode方法 public int hashcode hash h return h 假設現在又 abcd 的字串 則h 0 31 a 31 b 31 c 31 d 最後得到的表示式 是 a 31 4 1 b 31 4 2 c 31 4 3 d 可以簡單理解為 計算31進製的資料。這...

原始碼看JAVA 三十九 Deque

deque是雙向佇列,包含queue的全部功能,同時新增了雙向佇列的特有實現 1 在第乙個元素前新增元素 新增失敗丟擲異常 void addfirst e e 2 在最後的位置新增元素 新增失敗丟擲異常 void addlast e e 3 呼叫addfirst方法,新增成功返回true,否則丟擲異...

java執行緒狀態 原始碼淺看

一 thread概念 執行緒是作業系統能夠進行運算排程的最小單位 代表了一條順序的執行流 二 thread流程 1 切換過程 執行緒狀態 new runnable blocked waiting time waiting terminated 流轉圖 每種狀態切換 原始碼上也已經顯示很清楚了 new...