Given the code fragment:



public class App {

    public static void main(String[] args) {
        String str1 = "Java";
        String str2 = new String("java");
        //line n1
        {
            System.out.println("Equal");
        } else {
            System.out.println("Not Equal");
        }
    }
}

Which code fragment, when inserted at line n1, enables the App class to print Equal?

A.

String str3 = str2;
if (str1 == str3)
B.
if (str1.equalsIgnoreCase(str2))
C.
String str3 = str2;
if (str1.equals(str3))
D.
if (str1.toLowerCase() == str2.toLowerCase())

題解

Java的「==」運算子會判斷運算元的值是否相等,而非內容是否相等。在這裡若要輸出「Equal」,必須要讓if條件式成立。

選項A,str2和str3都是參考至相同的物件,但str1和str2是兩個不同的物件,所以它們的參考值是不一樣的,if條件式不會成立。

選項B,equalsIgnoreCase方法可以判斷字串在忽略字母大小寫的情況下是否相等。str1是「Java」,str2是「java」,因此if條件式成立。

選項C,str2和str3都是參考至相同的物件,equals可以判斷字串是否完全相等。str1是「Java」,str3是「java」,因此if條件式不成立。

選項D,toLowerCase方法會回傳將字串內的字母全都轉成小寫字母的結果。str1.toLowerCase()會回傳「java」,str2.toLowerCase()會回傳「java」,但雖然這兩字串都是「java」,它們實際上是不同的物件,因此有不同的參考,所以經過「==」運算後,結果將為false。