Java 基础 · 单选题 · 第 1 题
Java 后端开发面试 · 第 1 题
执行下面的代码,输出是?
String a = "hi";
String b = new String("hi");
System.out.println(a == b);- Atrue,因为两个字符串字面量都来自常量池,引用相同
- Bfalse,因为 b 指向用 new 在堆上新建的对象
- C编译报错,不能用 == 比较两个字符串
- D运行时抛出 ClassCastException 异常
答案
B B. false,因为 b 指向用 new 在堆上新建的对象
解析
== 比较的是引用是否指向同一个对象。a 指向字符串常量池里的 "hi",new String 一定会在堆上创建新对象,所以引用不同。比较字符串内容要用 equals;如果调用 b.intern(),返回的是常量池里的那个引用,与 a 相等。