给定以下Java代码片段:`String str1 = "abc"; String str2 = new String("abc"); String str3 = "a" + "bc";`,关于这三个字符串对象的比较,下列哪个断言为真?
答案解析
首先,`String str1 = "abc";` 会在字符串常量池中创建一个值为 "abc" 的字符串对象,并将引用赋给 `str1`。`String str2 = new String("abc");` 会在堆中创建一个新的 String 对象,其值也是 "abc",但它与常量池中的对象是不同的,所以 `str1 == str2` 为假。而 `String str3 = "a" + "bc";`,因为字符串常量在编译时会被连接,所以 `str3` 指向常量池中与 `str1` 相同的对象。因此 `str1 == str3` 为真。虽然 `str1 != str2`,但它们的值相等,所以 `str1.equals(str2)` 为真。因此,只有选项D完整且正确。
正确答案:D