close

本篇只是提到一些當初在學java所遇到的盲點,並紀錄之,避免後續忘記又要在小腦袋重新組織一次

 

1. 陣列的初始化 (陣列即是物件)

◆ int[] number = {1, 2, 3};
◆ int[][] number = { {1, 2}, {3, 4} };
三維、四維陣列依此類推,但不建議以三維以上的陣列紀錄資料,因為不容易撰寫、閱讀與理解,自定義類別解決會比較好。

值得特別說明的是,上面的例子若要以較完整的定義寫法則如下(可視為相同),皆為初始化:
◆ int[] number = new int[]{1, 2, 3};

若不知道陣列的內容,但知道此陣列的大小,就可以用下面的方式定義
◆ int[] number = new int[2];  就代表這個陣列名字為number大小為2

而二維陣列也不一定要是方陣,可使用如下方法定義(new)
◆ int[][] number = new int[2][];
   number[0] = {1,2,3,4};
   number[1] = new int[]{1,2,5,3,4,9};

 

 

2. 複製陣列

通常會需要複製陣列的原因是因為原本的陣列大小不夠大,此時就可以使用下列幾種方法

◆ System.arraycopy( 來源陣列, 來源起始索引, 目的陣列, 目的起始索引, 複製長度 )
使用這方法必須另行建立新陣列,所以在JDK6之後的版本,可以使用下列方法較為方便

◆ int[] newArray = Arrays.copyOf( 來源陣列, 新陣列的長度 )
注意:上述方法皆屬於「淺層複製(shallow copy)」,意思就是複製參考。
如果想要連同物件(以及物件內的元素) 一同複製,就必須要自行實作深層複製(deep copy)了。

 

 

3. 字串操作( 建立字串、字串轉字元陣列、字串處理、字串串接 )

建立字串的方法有兩種,注意,不一樣的建立方法,在比對字串時會有不一樣的結果

◆ String str1 = "string_1"; //如果是直接建立的,所有的字串都會被放在字串池內,代表字串內容
相同時,使用 == 判別結果會為true(用""建立字串的字串稱為字串常量 ─ String Literal)

◆ String str2 = new String("string_2"); //這個方法則是建立不同的物件,因此雖然字串內容相等,
但使用 == 判別結果則會為false
如果單純想要比較字串內容是否一樣,應使用 equals() 方法

String有許多方法可以使用,常用方法如下
◆ char[] charArray = new String("string").toCharArray(); //將字串轉成字元陣列
◆ int stringLength = new String("string").length(); //取得字串長度
◆ String newString = new String("string").toUpperCase(); //將字串中的小寫字母變成大寫

通常在處理一些數據時,一定會遇到一些數值為字串的形式,但也可以使用字串剖析將字串轉
為整數、浮點數等,下面所提到的Integer、Double等都是用已經包裝好的型別(作為一個class,
這些class則稱為包裹器)使用:
◆ Byte.parseByte("5"); //將5這個字串剖析成型別為byte的數字,即 return (byte) 5
◆ Integer.parseInt("15");
◆ Double.parseDouble("25.35");

在java中可以使用+來串接字串,不過在java中使用+串接會產生新的字串物件,若在重複性的串
接場合,則會不斷的產生新物件,基於程式效能,可以使用StringBuilder(在沒有多執行續的情況
下StringBuilder較佳,若是在多執行續的環境下則改用StringBuffer會有較佳的效能)來串接字串
◆ StringBuilder str = new StringBuilder().append("addString"); //可在後方加入.String()回傳字串

 

 

4. 字元陣列轉字串

◆ String.valueOf( 字元陣列 ); //這個方法是static method,所以可以直接叫用
而在 valueOf 裡面,不一定只能放char[](物件)而已,還有其他種形式,不過就不多加以說明了
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#method_summary

 

 

5. equals()的比較

一定有許多人對於==以及.equals()的使用有很~~~大的問號(包含我也是XD),在釐清之後決定做下一篇筆記
避免之後又忘記(實在看了一些source code呀...)。
順帶一提,==只是單純比較兩個物件的位址是否相同而已。

.equals()總共有 1)Object.equals()  2)String.equals()  3)Arrays.equals(),接下來要來說說這三個哪裡不同

Object.equals()
在Object.class中,可以看到他的source code如下,表示只有比較物件的位置,亦即同等使用==

String.equals()
在String.class中,可以看到他的source code如下,表示是真的有在比較字串的內容而非物件位置

Arrays.equals()
在Array.class中,可以看到他的source code如下,也表示是真的在比較兩個陣列內的元素

 

 

6. 兩個陣列的比較

從5可以知道,如果要比較兩個陣列內的元素是否一樣,必須使用Arrays.equals()才行。雖然陣列或字串
皆為物件(畢竟java就是以物件為基準的語言),但因為Object.equals()只比較兩個物件的位置而已,並沒
有真的比較內容物。

char[] a = {'a', 'b', 'c'};
char[] b = {'a', 'b', 'c'};
比較下,就可以知道執行結果為何拉~ (至於為什麼結果不一樣,如果還不知道可能要重新看5的說明了!)
System.out.println(a.equals(b));        //False
System.out.println(Arrays.equals(a, b));//true

 

 

 

 

 

(目前先更新到這邊XD 想到在繼續更新)

 

arrow
arrow
    全站熱搜

    魚大 發表在 痞客邦 留言(0) 人氣()