程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JavaSE入門學習28:Java常用類之String類(下)

JavaSE入門學習28:Java常用類之String類(下)

編輯:JAVA綜合教程

JavaSE入門學習28:Java常用類之String類(下)


七字符串的不變性

String對象創建後則不能被修改,是不可變的,所謂的修改其實是創建了新的對象,所指向的內存空間不同。如

下圖所示:

\

運行結果:

\

結合上面的代碼,關於字符串必須要了解的:

1)通過String s1="愛慕課"; 聲明了一個字符串對象, s1存放了到字符串對象的引用,在內存中的存放引用關系如

下圖所示:

\

然後通過s1="歡迎來到:"+s1; 改變了字符串s1 ,其實質是創建了新的字符串對象,變量s1指向了新創建的字符

串對象,如下圖所示:

\

2)一旦一個字符串在內存中創建,則這個字符串將不可改變。如果需要一個可以改變的字符串,我們可以使用

StringBuffer類或者StringBuilder類。

3) 每次 new 一個字符串就是產生一個新的對象,即便兩個字符串的內容相同,使用 "==" 比較時也為 ”false” ,如

果只需比較內容是否相同,應使用 "equals()" 方法。s3和s4 都是通過new 在堆內存中創建的新對象,有各自的地址,

而==比較的就是地址,所以為false。

實例:

public class Test {
    public static void main(String[] args) {
        String s1 = "imooc";
        String s2 = "imooc";
        //定義字符串s3,保存“I love”和s1拼接後的內容
        String s3="I love"+s1;	
        // 比較字符串s1和s2
        // imooc為常量字符串,多次出現時會被編譯器優化,只創建一個對象
        System.out.println("s1和s2內存地址相同嗎?" + (s1 == s2));
        //比較字符串s1和s3
        System.out.println("s1和s3內存地址相同嗎?" +(s1==s3));
        String s4 = "I love " + s1;
        //比較字符串s4和s3
        // s1是變量,s4在運行時才知道具體值,所以s3和s4是不同的對象
        System.out.println("s3和s4內存地址相同嗎?" + (s4 == s3));
    }
}

 

編譯運行結果:

\

解釋:

S1是將字符串存在常量池中,所以它的地址是常量池給的。同樣S2也是常量池給的地址,地址都是字符串常

量"imooc"的地址,所以s1和s2的地址是一樣的。然而s3是一個常量加上一個變量,因此是存在堆內存中,這個地址

是堆內存新給s3的。同理,s4的地址也是堆內存給他的。因此s3和s4的內存地址是不一樣的。

八String類常用方法詳解

String 類提供了許多用來處理字符串的方法,例如,獲取字符串長度、對字符串進行截取、將字符串轉換為大寫

或小寫、字符串分割等。

String類常用方法一:

 

\ 結合代碼來熟悉一下方法的使用:

 

 

public class Test{
    public static void main(String[] args){
        String s1 = "sun java"; 
        String s2 = "sun Java";
        System.out.println(s1.charAt(1));//u	
        System.out.println(s2.length());//8
        System.out.println(s1.indexOf("java"));//4
        System.out.println(s1.indexOf("Java"));//-1
        System.out.println(s1.equals(s2));//false
        System.out.println(s1.equalsIgnoreCase(s2));//true
		
        String s = "我是程序員,我在學java";
        String str = s.replace('我','你');
        System.out.println(str);
    }
}
運行結果:

 

\

String類常用方法二:

\

實例代碼:

 

public class Test{
    public static void main(String[] args){
        String s = "Welcome to Java World!";
        String s1 = " sun java "; 
        System.out.println(s.startsWith("Welcome"));//true	
        System.out.println(s.endsWith("World"));//false
        String sL = s.toLowerCase();
        String sU = s.toUpperCase();
        System.out.println(sL);
        System.out.println(sU);
        String subs = s.substring(11);
        System.out.println(subs);
        String sp = s1.trim();
        System.out.println(sp);
    }
}  

 

運行結果:

 

\

 

注意事項:

1)字符串s2中字符的索引從0開始,范圍為 到str.length()-1。

2)使用indexOf進行字符或字符串查找時,如果匹配返回位置索引;如果沒有匹配結果,返回-1。

3)使用substring(beginIndex , endIndex)進行字符串截取時,包括beginIndex位置的字符,不包括endIndex位置的

字符。

String類常用方法三:

靜態重載方法

public static String valueOf(...)可以將基本類型轉換為字符串

例如:

 

public static String valueOf(double d)
public static String valueOf(int i)

 

方法public String[] split(String regex)可以將一個字符串按照指定的分隔符分割,返回分割後的字符串數組。

實例代碼:

 

public class Test{
    public static void main(String[] args){
         int j = 1234567;
         String sNumber = String.valueOf(j);
         System.out.println("j 是"+sNumber.length()+"位數");
         String s = "Mary,F,1976";
         String[] split = s.split(",");
         for(int i=0;i

 

運行結果:

\

九String類中的"=="和equals()的異同

1)==: 判斷兩個字符串在內存中首地址是否相同,即判斷是否是同一個字符串對象。

2)equals(): 比較存儲在兩個字符串對象中的內容是否一致。

這兩個的用法我們在前面已經多處的用到,在這裡就不再詳細舉例說明他們的異同

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved