在Java中,关于对象比较,下列代码的输出结果是什么? ``` String s1 = new String("Java"); String s2 = "Java"; String s3 = s1.intern(); System.out.println((s1 == s2) + " " + (s2 == s3)); ```

答案解析

### 核心考点说明 本题综合考察字符串常量池机制、`intern()`方法的作用及对象引用比较(==)与值比较(equals)的区别。 ### 解题思路分析 1. `s1`在堆中创建新对象,不加入常量池 2. `s2`直接指向常量池中的"Java" 3. `s1.intern()`返回常量池中已存在的"Java"引用(即`s2`) 4. `==`比较引用地址,`equals`比较值 ### 选项详细分析 - **A**:错误。未理解`intern()`会返回常量池引用 - **B**:正确。`s1`与`s2`地址不同,`s2`与`s3`地址相同 - **C**:错误。混淆堆对象与常量池对象的地址区别 - **D**:错误。误认为所有字符串创建方式都会复用常量池 ### 易错点提醒 - 使用`new`创建的字符串对象不会自动放入常量池 - `intern()`方法在常量池存在对应字符串时直接返回引用,否则添加并返回 - ==比较的是内存地址而非内容
正确答案:B
随机推荐
开始刷题