第 1 頁 (共 1 頁)
宣告 Array
發表於 : 2014年 7月 31日, 17:47
由 davidlan
java 撰寫慣例
int[] scores;
C/C++撰寫慣例
int score[];
均可
宣告 三維Array
發表於 : 2014年 7月 31日, 17:52
由 davidlan
int[][][] scores;
不建議以三維陣列以上方式記錄資料,以自訂類別來解決這方面需求。
陣列元素初始值
發表於 : 2014年 7月 31日, 17:55
由 davidlan
陣列元素初始值
代表建立陣列物件的類別定義,是由 JVM 動態產生。
使用 java.util.Arrays 的 fill() 設定新建陣列的元素值
int[] score = {1,2,3} 建立三個物件
Integer[] score = new Integer[3]; 建立0個物件
陣列元素初始值

字串常量 (String Literal) 與字串池 (String Pool)
發表於 : 2014年 8月 1日, 16:30
由 davidlan
char[] name = {'J',....}
String name1 = new String(name);
String name2 = new String(name);
JVM 在 Heap 上建立了兩個 Object, 所以 name1 != name2
字串常量 (String Literal): " "
字串池 (String Pool): JVM 將建立的字串常量放到字串池中,讓reference name 去 refer
String name1 = "J...";
String name2 = "J...";
name1 與 name2 refer 到同一個 Object, 所以 name1 == name2
我們沒什麼不同
String name1 = "J..."; //name1 將reference name assign 到 string pool 中的 String literal Object
String name2 = "J..."; //name1 將reference name assign 到 string pool 中的 String literal Object
String name3 = new String("J..."); //JVM 在 Heap 上 建立一個Object
String name4 = new String("J..."); //JVM 在 Heap 上 建立另一個Object
(1) name1 == name2 name1 與 name2 到string pool refer 到同一個 String literal Object
(2) name1 != name3
(3) name3 != name4
要比較name1,name2,name3實際字元內容是否相同,不要用==, 要用equals()
String text1 = "Ja" + "va";
String text2 = "Java";
text1 == text2
不可變動字串 (Immutable)
發表於 : 2014年 8月 11日, 18:08
由 davidlan
字串物件一旦建立,物件上沒有任何方法可以更動字串內容。
Original
String name1 = "Java";
String name2 = name1 + "World"
Decompile
String s = "Java";
String s1 = (new StringBuilder()).append(s)("World").toString();
使用+串接字串會產生新的 String 實例,不要將 + 用在重複性的串接場合,會有效能上的負擔。
1+2+...+100
發表於 : 2014年 8月 19日, 23:41
由 davidlan
Method1
for(int i = 1; i < 101; i++) {
System.out.print(i);
if(i != 100) {
System.out.print('+');
}
}
Method2
for(int i = 1; i < 100; i++) {
System.out.printf("%d+",i);
}
System.out.println(100);
Method3
String text = "";
for(int i = 1; i < 100; i++) {
text = text + i + '+';
}
System.out.println(text + 100);
Good Method
StringBuilder builder = new StringBuilder();
for(int i = 1; i < 100; i++) {
builder.append(i).append('+');
}
System.out.println(builder.append(100).toString());
java.lang.StringBuilder & StringBuffer
發表於 : 2014年 8月 19日, 23:47
由 davidlan
非多執行緒 (Multithread), 使用 StringBuilder 有較好的效率。
StringBuilder
不處理 Synchronized;
StringBuffer
會處理 Synchronized,多執行緒環境下使用。