题目
47. (1.0分) Java中,以下关于String字符串比较程序片段输出的是 String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); A 1 B false C true D 0
47. (1.0分) Java中,以下关于String字符串比较程序片段输出的是
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);
A 1
B false
C true
D 0
题目解答
答案
问题解析
在Java中,String 是一个不可变的类,这意味着一旦一个 String 对象被创建,它的值就不能被改变。Java 为了提高性能和减少内存使用,使用了字符串常量池(String Pool)来存储字符串字面量。
代码分析
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);
-
字符串常量池:
- 当你使用字面量方式创建字符串(如
String s1 = "abc";),Java 会首先检查字符串常量池中是否已经存在一个值为"abc"的字符串。 - 如果存在,
s1将引用这个已存在的字符串。 - 如果不存在,Java 会在字符串常量池中创建一个新的字符串对象,并将
s1引用指向这个新对象。
- 当你使用字面量方式创建字符串(如
-
比较操作:
s1 == s2比较的是两个引用是否指向同一个对象。- 由于
s1和s2都是通过字面量方式创建的,且值相同,Java 会确保它们引用的是字符串常量池中的同一个对象。
结论
因此,s1 == s2 的结果是 true,因为 s1 和 s2 实际上引用的是同一个字符串对象。
答案
正确答案是 C true。
解析
本题考查Java中字符串比较以及字符串常量池的知识点。解题思路是理解Java中使用字面量创建字符串时字符串常量池的工作机制,以及==运算符在比较引用类型时的作用。
- 当使用
String s1 = "abc";这种字面量方式创建字符串时,Java会先检查字符串常量池中是否已经存在值为"abc"的字符串。- 若存在,
s1会引用这个已存在的字符串。 - 若不存在,Java会在字符串常量池中创建一个新的字符串对象,并让
s1引用指向这个新对象。
- 若存在,
- 对于
String s2 = "abc";同样的操作,由于字符串常量池中已经存在"abc"这个字符串,所以s2会引用同一个对象。 s1 == s2比较的是两个引用是否指向同一个对象。因为s1和s2都引用了字符串常量池中的同一个"abc"对象,所以s1 == s2的结果为true。