在Debian上使用Java時,有一些常見的誤區需要注意。以下是一些典型的例子:
if (str == "hello") { ... }
使用 == 比較字符串會導致比較的是對象的引用,而不是字符串的內容。if ("hello".equals(str)) { ... }
或者使用 Objects.equals(str, "hello") 來避免空指針異常(NPE)。List<String> list = new ArrayList<>();
for (String item : list) {
if (item.equals("remove")) {
list.remove(item); // 可能拋出ConcurrentModificationException
}
}
在遍歷集合時直接修改集合會導致 ConcurrentModificationException。Iterator:Iterator<String> it = list.iterator();
while (it.hasNext()) {
if (it.next().equals("remove")) {
it.remove();
}
}
removeIf(Java 8+):list.removeIf(item -> item.equals("remove"));
Date date = new Date();
date.setDate(date.getDate() + 1); // 使用過時的方法
使用過時的 Date 類的方法進行日期計算。LocalDate:LocalDate date = LocalDate.now();
date = date.plusDays(1);
Calendar 類:Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
FileInputStream fis = new FileInputStream("file.txt");
// 沒有關閉流
未正確關閉資源可能導致資源泄漏。try-with-resources 語句自動關閉資源:try (FileInputStream fis = new FileInputStream("file.txt")) {
// 使用資源
} catch (IOException e) {
e.printStackTrace();
}
List<fruit> plate = new ArrayList<apple>();
這會導致類型不兼容的錯誤,因為 ArrayList<apple> 不能轉換為 List<fruit>。? extends fruit:List<? extends fruit> plate = new ArrayList<apple>();
這表示 plate 可以引用任何繼承自 fruit 的子類型的列表。export JAVA_HOME=/usr/local/jdk-1.6.0_16
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
設置環境變量時,路徑和類路徑的格式不正確。export JAVA_HOME=/usr/local/jdk-1.6.0_16
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
希望這些常見的誤區能幫助你更好地在Debian上使用Java。