星海

Java 基础 · 单选题 · 第 1 题

Java 后端开发面试 · 第 1 题

执行下面的代码,输出是?

String a = "hi";
String b = new String("hi");
System.out.println(a == b);
  1. Atrue,因为两个字符串字面量都来自常量池,引用相同
  2. Bfalse,因为 b 指向用 new 在堆上新建的对象
  3. C编译报错,不能用 == 比较两个字符串
  4. D运行时抛出 ClassCastException 异常

答案

B B. false,因为 b 指向用 new 在堆上新建的对象

解析

== 比较的是引用是否指向同一个对象。a 指向字符串常量池里的 "hi",new String 一定会在堆上创建新对象,所以引用不同。比较字符串内容要用 equals;如果调用 b.intern(),返回的是常量池里的那个引用,与 a 相等。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。