String str = null;
while (str != "z") { // 錯誤:使用 != 比較字符串內容
str = br.readLine();
System.out.println("Input :" + str);
}
問題在於 str != "z" 比較的是對象引用而非內容。Java 中字符串常量池機制導致該判斷不可靠;且未處理 readLine() 返回 null(流結束)的情況。
String str = "";
while (!"z".equals(str) && str != null) {
str = br.readLine();
System.out.println("Input :" + str);
}
!"z".equals(str) 避免空指針並正確比較內容。str != null 判斷,防止流結束導致死循環。str = "" 而非 null,簡化邏輯。Java 9+ 可使用 BufferedReader.lines() 返回 Stream 配合 takeWhile 更優雅地處理:
br.lines()
.takeWhile(s -> !"z".equals(s))
.forEach(s -> System.out.println("Input :" + s));