2010-08-30 124 views
57

CharSequence[]String[]和有什麼不一樣?CharSequence []和一個String []之間有什麼區別?

+0

您可能想要添加一個java標記。或者有足夠代表的人可以做到。 – codinguser 2010-08-30 13:19:17

+4

請參閱_Effective Java第2版,第52項:通過其interfaces_參考對象。 ''String'是一個''''''CharSequence'是一個'接口'('String'和其他一些實現)。 CharSequence []'更靈活。這就是說,_項目25:首選列表array_。 – polygenelubricants 2010-08-30 16:20:39

+1

[CharSequence VS String in Java?]可能的重複(http://stackoverflow.com/questions/1049228/charsequence-vs-string-in-java) – 2015-07-01 18:33:06

回答

6

CharSequence是一個接口。字符串是不可變的字符序列並實現CharSequence接口。 CharSequence []和String []分別只是CharSequence和String的數組。

這意味着無論您看到CharSequence,都可以傳遞一個String對象。

68

String實現CharSequence接口。 CharSequence由String實現,但也包括CharBuffer,Segment,StringBuffer,StringBuilder。

所以一個String []和一個CharSequence []實質上是一樣的。但CharSequence是抽象的,String是實現。

順便說一句,'[]'表示數組的對象。所以String[]是一個字符串數組。而String本身就是一個字符數組。

+0

在Java中,String不是一個完全的字符數組。這些字符存儲在一個數組中,但您永遠無法訪問以確保字符串不可變。 – 2016-05-07 00:41:10

0

CharSequence表示一組有序的字符,並定義了檢查該字符集的方法。它是接口,並且此接口的一個實現是字符串類。

有關更多信息,請參閱Java API文檔。此外,本教程可能會對您有所幫助:http://download.oracle.com/javase/tutorial/

+4

「有序字符集」意味着相同的字符不能出現兩次。 – 2010-08-30 13:45:59

+1

我認爲他的評論意在區分大小寫。他沒有說'套',是嗎? – 2016-05-12 07:55:21

28

CharSequence表示一個字符序列的接口,其中所有實現它的類都具有相同的操作。但是,特別是,CharSequence不能保證序列是否可變。因此,您可以擁有一個不可變的實施類,如String或可變類,如StringBuilderStringBuffer

此外,CharSequence沒有細化的equals()hashCode()方法的通用實現,所以也不能保證實現CharSequence不同的類中的對象將比較等於即使他們持有的基本順序是一樣的。因此,考慮到:這三者之間

String seq1 = "hello"; 
StringBuilder seq2 = new StringBuilder("hello"); 
StringBuffer seq3 = new StringBuffer("hello"); 

比較使用.equals()在Java 1.6的回報false,但我找不到任何保證,這不會在將來改變(雖然它可能是相當不可能的)。

CharSequence[]String[]只是它們各自類型的數組。

編輯:這樣做的實際結果是比較CharSequence S代表平等,你必須使用他們toString()方法和比較結果String S,因爲這是保證返回true如果基礎序列是相同的。

+2

+1爲好的解釋 – confucius 2012-05-05 18:49:32

1

CharSequence是一個接口。字符串是一個實現CharSequence接口的類。這意味着一個String對象作爲CharSequence對象傳遞。有不同的類實現CharSequence接口。它們都定義了與方法簽名(或抽象方法)相關的方法?)CharSequence提供的接口。

0

這裏是我的圖表,展示了String是如何實施CharSequenceinterfaceconcrete classes之一。

特別是,StringBuilder通常用作鏈接String運算符的快速替代對象,其中不需要線程安全性,運算符爲+

的方括號表示的陣列。因此,String[]String對象的數組,而CharSequence[]是對象的數組,它可以是或不是String對象,但絕對是實現CharSequence接口的對象。

有關更多討論,請參見my Answer heremy Answer here

相關問題