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,多執行緒環境下使用。