4.JAVA-數組、String詳解


1.數組

public class Test{

                  public static void main(String args[]){
                          int[] intArray = new int[] {1,4,3,2,5};//等價於 : int intArray[] = new int[] {1,2,3,4,5};

                          System.out.println(intArray.length);      //打印長度

                         
                          //使用java.util.Arrays工具類 來操作 數組
                          System.out.println(java.util.Arrays.toString(intArray));//打印內容
                          java.util.Arrays.sort(intArray);         //排序
                          System.out.println("4="+java.util.Arrays.binarySearch(intArray,4));//通過2分查找4所在的位置(必須先排序才行)

                          System.out.println(java.util.Arrays.toString(intArray));//打印內容


                          //初次之外java.util.Arrays類還有:
                          //copyOf():復制
                          //copyOfRange():指定具體范圍復制
                          //equals():判斷兩個數組是否相等
                          //fill():填充某個值
                          //hashCode():根據數組內容返回哈希碼
                  }
}

 

2.二維數組

初始化的一般為3種:

         int[][] arr1 = {{1,2}, {2, 3}, {4, 5}};
         int[][] arr2 = new int[5][5];
         int[][] arr3 = new int[5][];       //這種則需要使用的時候再去new一次,否則無法確定二維大小

示例:

public class Test{

         public static void main(String args[]){
            int[][] arr3 = new int[5][];

            for(int i=0; i<arr3.length; ++i) {
            arr3[i] = new int[i + 1];

            for (int j = 0; j < arr3[i].length; ++j)
                arr3[i][j] = i + j;
            }

            for(int i=0; i<arr3.length; ++i) 
             System.out.println(java.util.Arrays.toString(arr3[i]));
         }
}

打印:

 

 

3.String

java中的String采用共享設計模式(后續會講),都存在string池中,存儲的是常量字符串.

string常量字符串的說明可以看第2章說明:2.JAVA-基礎語法以及String的介紹

3.1 String兩種實例化說明

String strA = "123";                         //只會在string池中創建"123"常量字符串

String strB = new String("123");             //由於string池中已經有了"123",所以只在堆空間分配一段內存來存儲"123",然后使strB引用它.

strA = "124";                                //在string池中創建"124"並返回這個地址,並且將之前的"123"視為垃圾,等待回收站釋放.

3.2 ==和equals()的區別

  •    ==     :   用來判斷String的內存地址是否相等
  • equals(): 用來判斷兩個String的字符串內容相等

示例:

String strA = "123";                      //在string池中創建"123"字符串,並返回這個引用

String strB =strA;                        //strB和strA相等

String strC = "1" + "23";                 //strC="123",由於string池中已經有了"123",所以直接讓strA=strB=strC

String strD = new String("123");          //可能會分配兩塊空間,1:首先會去string池中尋找"123"字符串,如果存在則直接調用,否則在池中創建"123".
                                          //2:然后在堆空間創建"123"的一段內存,使strD引用它.
                                          //3: 最后再去判斷string池中的"123"是否被其它對象使用,如果沒有,則視為垃圾,等待釋放.

System.out.println("strA == strB:"+(strA==strB));
System.out.println("strA == strC:"+(strA==strC));
System.out.println("strA == strD:"+(strA==strD));
System.out.println("equals:"+strA.equals(strD));

打印如下:

 

3.3 String共享設計模式

我們先將上個示例對應的圖畫出來,如下所示:

 

如上圖所示.在JVM底層上是有一個string池(同樣也有其它類似的池),當代碼中使用了直接賦值的方式定義一個string對象時,會將此字符串對象所使用的匿名對象進行入池保存,而后面如果又重新定義String對象,並且設置相同內容時,那么將不會在String池開辟新空間,而是繼續使用,這種模式叫做共享設計模式.

 

3.4 String的new實例化之手工入池

String有一個intern()方法,可以使new實例化實現手工入池,intern方法定義如下:

public String intern();
//在string池中尋找等於此string的字符串,如果字符串存在,則返回池中的字符串,否則,在池中創建字符串后再返回池中的字符串.

示例如下:

String strA = new String("123").intern();   //在堆空間創建"123"的一段內存.並且將"123"入池,然后返回池中的"123"所在的位置
String strB = "123";                       //返回池中的"123"所在的位置
System.out.println(strA==strB);            //打印true

打印如下:

 

 

3.5 String之其它常用成員方法

String str="hello world 我";

char[] data = str.toCharArray();               //將String轉為char

 
System.out.println(str.charAt(2));           //返回小標處2的char值,返回l

System.out.println(str.codePointAt(11));     //返回小標出11(“我”)的Unicode碼

String str1 = str.concat("是NQIAN");          //將str和"是NQIAN"進行連接,並返回給str1
System.out.println(str1);


System.out.println( str.compareTo("hello.") );   //將"hello world 我"和"hello"按ASC表進行比較
                             // 如果str大於"hello."返回正數,相等返回0,小於返回負數

System.out.println( str.compareToIgnoreCase ("hello.") ); //忽略大小寫比較兩個字符串

System.out.println( str.contains("he") );                //判斷str里是否包含"he"字符,包含返回true,否則返回false

System.out.println( str. startsWith("he") );            //如果str是以"he"開頭,返回true,否則返回false

System.out.println( str.endsWith("he") );              //如果str是以"he"結尾,返回true,否則返回false

System.out.println( str.equals("hello world 我") );        //判斷兩個字符串內容是否相等,返回boolean類型

System.out.println( str.equalsIgnoreCase  ("hello world 我") ); //忽略大小,判斷兩個字符串內容是否相等

System.out.println( str.format("str1:%03d  %03f  %s",75,5.234,"format") );
//類似於sprintf(),打印"str1:075 5.23400 format",需要注意:並不會改變對象本身內容,str的值還是為:hello world 我 System.out.println( str.hashCode () ); // 返回str的哈希值(內容不同的字符串,哈希值都不同) System.out.println( str. indexOf ("e")); //從頭查找出現e字符的位置,所以返回1,如果未找到返回-1 System.out.println( str. indexOf ("ld",4)); //從下標4處查找出現"ld"的位置並返回,如果未找到返回-1 System.out.println( str. lastIndexOf ("e")); //從尾部向前查找出現e字符的位置並返回,如果未找到返回-1 System.out.println( str. lastIndexOf ("o",5)); //從下標4處尾部向前查找出現"o"的位置,所以返回4 System.out.println( str. length ()); //返回String長度 System.out.println( str. isEmpty ()); //判斷是否為空 System.out.println( str. replace("l","o")); //將字符串中的l替換為o,所以打印" heooo worod 我" String[] arrStr = str. split(" "); //以" "來拆開字符串,所以arrStr[0]="hello",arrStr[1]="world", arrStr[2]="我" System.out.println( str. substring(1,5)); //返回str的內容下標1~4的串(不包括5),所以打印:ello System.out.println( str.toLowerCase()); //返回str的小寫內容 System.out.println( str. toUpperCase()); //返回str的大寫內容 System.out.println( " adc ABC ". trim ()); //trim修剪字符串頭和尾部的空格,所以打印:"abc ABC",注意:如果頭尾的字符小於空格的話,也會被修剪掉的. System.out.println( str.valueOf(true)); //返回true對應的字符串,也就是"true",當然valueOf也滿足int,double等參數

 

 

 下章學習:5.JAVA-內部類實例

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM