原住民族考試四等考試-電子工程類科計算機概要105 年第 29 題單選題
下列的 Java 語言程式執行後輸出為何?
import java.lang.*;
class test
{
public static void main(String[] argv)
{
int x=0;
String s1="Hello";
String s2="Hello";
String s3=new String("Hello");
String s4=new String("Hello");
if(s1==s2)x++;
if(s1==s3)x++;
if(s3==s4)x++;
System.out.println(x);
}
}
B正確答案
Java 中 == 比較參考位址;字串常量池讓 s1、s2 指向同一物件,new String() 則建立新物件。
為什麼答案是 B
s1、s2 皆為字面量 "Hello",Java 會放入字串常量池共用同一參考,故 s1==s2 為 true,x++ 一次。s3、s4 由 new 建立,各自是新物件,參考位址不同,兩次比較皆 false。最終 x=1。
載入中…
完整詳解
Pro · 無限重點 Java 中 == 比較參考位址;字串常量池讓 s1、s2 指向同一物件,new String() 則建立新物件。
看到 new String() 就記住:它一定是「新物件」,用 == 比較必為 false。只有字面量會進常量池共用。
逐選項分析
A✕
若誤以為 Java 的 == 都是比較內容,會認為全部相等或全部不等。但 s1==s2 確實成立,x 不會是 0。
B✓ 正確
s1、s2 皆為字面量 "Hello",Java 會放入字串常量池共用同一參考,故 s1==s2 為 true,x++ 一次。s3、s4 由 new 建立,各自是新物件,參考位址不同,兩次比較皆 false。最終 x=1。
C✕ 陷阱
陷阱:誤以為 s1==s3 也成立(因為內容都是 Hello)。但 s3 是 new 出來的新物件,參考不同,== 為 false。
D✕
若把 == 當成 equals() 來比較內容,四個字串內容都是 Hello,會誤判三次都成立得到 3。實際上 == 比參考。
Java 字串比較結果對照
| 比較 | 左側來源 | 右側來源 | == 結果 |
|---|
| s1==s2 | 字面量(常量池) | 字面量(常量池) | true ✓ |
| s1==s3 | 字面量 | new String | false |
| s3==s4 | new String | new String | false |
最常見陷阱:把 Java 的 == 當成 C/C++ 的字串內容比較。Java 中 == 對物件是比參考位址,只有字面量因字串常量池機制可能共用位址,而 new String() 必定產生新物件,== 結果一律為 false。