Posted on 2010-11-08 14:41
セ軍魂ミ 閱讀(2559)
評論(0) 編輯 收藏
String:
java中的字符串。 String類是不可變的,對String類的任何改變,都是返回一個新的String類對象。 String 對象是 System.Char 對象的有序集合,用于表示字符串。String 對象的值是該有序集合的內容,并且該值是不可變的。這樣的話把String類的引用傳遞給一個方法,該方法對String的任何改變,對原引用指向的對象沒有任何影響,
String s1 = "abc";
String s2= "def";
String s2 = s1;
//這樣操作之后s1是"abc",s2也是"abc".
String 有兩種賦值方式:①直接賦值:String s1 = "abc";
②用new開辟空間:String str1 = new String(“abc”) ;
區別:①先看下面這個程序,看結果是否相等
public static void main(String args[]) {
//都是采用直接賦值的方式
String str1 = "abc";
//String能否采用new的方式賦值呢?
String str2 = new String("abc");
String str3 = str2;
System.out.println(str1);
System.out.println(str2);
//String該如何比較是否相等呢
System.out.println(str1==str2);
System.out.println(str2==str3);
}
運行結果:abc
abc
false
true
出現上述運行結果的原因: “==”如果直接應用在字符串上進行比較,則表示比較的是內存地址的值。在
String str1="abc";證明棧內存中有個str1,在堆內存中的內容就是abc,只會產生一個對象;而在String str1 = new String(“abc”) ;代碼中我們知道“abc”是匿名對象,那么在堆內存中就會有塊空間是“abc”,緊接著new String("abc") 使用new在堆內存中又開辟了一個空間“abc”,最后String str1 = new String("abc") ;代碼將最后生成的“abc”內存地址指向str1,最早的一個“abc”就沒使用上。 即使用new 關鍵字開辟,則會產生兩個對象 。
②直接賦值法,在堆內存中只會產生一個對象,而用new開辟空間法,最后在堆內存中是產生了兩個對象。
String str1="abc";

String str1 = new String("abc") ;

String 類提供的成員執行以下操作有:比較 String 對象;返回 String 對象內字符或字符串的索引;復制 String 對象的值;分隔字符串或組合字符串;修改字符串的值;將數字、日期和時間或枚舉值的格式設置為字符串;對字符串進行規范化。
使用 Compare、CompareOrdinal、CompareTo、Equals、EndsWith 和 StartsWith 方法進行比較。
使用 IndexOf、IndexOfAny、LastIndexOf 和 LastIndexOfAny 方法可獲取字符串中子字符串或 Unicode 字符的索引。
使用 Copy 和 CopyTo 可將字符串或子字符串復制到另一個字符串或 Char 類型的數組。
使用 Substring 和 Split 方法可通過原始字符串的組成部分創建一個或多個新字符串;
使用 Concat 和 Join 方法可通過一個或多個子字符串創建新字符串。
使用 Insert、Replace、Remove、PadLeft、PadRight、Trim、TrimEnd 和 TrimStart 可修改字符串的全部或部分。
使用 ToLower、ToLowerInvariant、ToUpper 和 ToUpperInvariant 方法可更改字符串中 Unicode 字符的大小寫。
使用 Format, 可將字符串中的一個或多個格式項占位符替換為一個或多個數字、日期和時間或枚舉值的文本表示形式。
使用 Length 屬性可獲取字符串中 Char 對象的數量;使用 Chars 屬性可訪問字符串中實際的 Char 對象。
使用 IsNormalized 方法可測試某個字符串是否已規范化為特定的范式。使用 Normalize 方法可創建規范化為特定范式的字符串。
"=="與equals的區別:“==”表示比較的是內存地址的值
equals表示比較兩個字符串的內容是否相等
若把上面的程序改為如下程序,再看運行結果是什么:
public static void main(String args[]) {
//都是采用直接賦值的方式
String str1 = "abc";
//String能否采用new的方式賦值呢?
String str2 = new String("abc");
String str3 = str2;
System.out.println(str1);
System.out.println(str2);
//String該如何比較是否相等呢
System.out.println(str1.equals(str2);
System.out.println(str2.equals(str3);
}
運行結果:abc
abc
true
true
總結:這些就是我對java中String類的初步認識,希望能給大家帶來一定的幫助,若有什么不對的,也希望大家給與提出建議,我也從中學習、體會,謝謝!