阿摩線上測驗 登入

申論題資訊

試卷:104年 - 104 公務升官等考試_薦任_資訊處理:程式語言#41168
科目:程式語言
年份:104年
排序:0

題組內容

二、

申論題內容

⑴執行以下 Java 程式片段後,b1 和 b2 的值各為何?(6 分)
String st1 = new String("Good!");
String st2 = new String("Good!");
boolean b1 = (st1 == st2);
boolean b2 = st1.equals(st2);

詳解 (共 2 筆)

詳解 提供者:114年高考上榜

在 Java 中,使用 == 運算子比較兩個物件的參考(reference),而使用 equals() 方法比較兩個物件的值(value)。

 
根據程式片段,我們建立了兩個新的字串物件 st1 和 st2,兩者都包含相同的字串 "Good!"。但是由於 new 關鍵字會在記憶體中建立新的物件,因此 st1 和 st2 是不同的物件實例。
 
因此,下面是 b1 和 b2 的值:
 
b1 的值為 false。因為 st1 和 st2 是不同的物件實例,所以它們的參考不同。使用 == 運算子比較時,會得到 false。
b2 的值為 true。因為 String 類別的 equals() 方法會比較兩個物件的內容,而不是它們的參考。由於 st1 和 st2 包含相同的字串 "Good!",所以 equals() 方法會傳回 true。
因此,程式片段執行後,b1 的值為 false,b2 的值為 true。
詳解 提供者:hchungw
在這段 Java 程式片段中,我們會分別比較 st1 和 st2 的引用(reference)以及它們的值(content)。讓我們逐步分析這段程式並解釋執行結果。
java
複製程式碼
String st1 = new String("Good!");
String st2 = new String("Good!");
boolean b1 = (st1 == st2);
boolean b2 = st1.equals(st2);
分析
建立字串物件
java
複製程式碼
String st1 = new String("Good!");
String st2 = new String("Good!");
這兩行程式碼分別創建了兩個新的 String 物件。儘管它們的內容(content)一樣,但它們是兩個不同的物件,位於不同的記憶體位置。因此,st1 和 st2 是指向兩個不同的物件的引用。
比較引用
java
複製程式碼
boolean b1 = (st1 == st2);
== 操作符比較的是兩個引用是否指向同一個物件。在這裡,st1 和 st2 指向的是不同的物件,所以 (st1 == st2) 的結果為 false。
比較內容
java
複製程式碼
boolean b2 = st1.equals(st2);
equals 方法比較的是兩個字串物件的內容。在這裡,st1 和 st2 的內容都是 "Good!",所以 st1.equals(st2) 的結果為 true。
結論
b1 的值為 false,因為 st1 和 st2 是兩個不同的物件。
b2 的值為 true,因為 st1 和 st2 的內容相同。
最終答案
java
複製程式碼
boolean b1 = (st1 == st2);  // b1 的值為 false
boolean b2 = st1.equals(st2);  // b2 的值為 true
所以,執行這段程式片段後,b1 的值是 false,b2 的值是 true。