Java字符串测验
欢迎参加Java字符串测验。字符串是Java中最重要的类之一。如果你有在Java中做过任何编程,你肯定会用到它。
字符串是Java面试问题或测验中非常流行的话题,所以我收集了一些精彩且有迷惑性的Java字符串测验问题,你可以尝试一下。
Java字符串测验
这个测验共有21个问题。如果你能正确回答15个或更多,那么你可以认为自己在字符串概念上非常擅长。你可以通过点击每个问题后面的“揭示答案”按钮来查看答案和详细解释。
让我们开始弦乐测验,祝你好运!
下面的语句将会有什么输出?
String s = "Java String Quiz";
System.out.println(s.charAt(s.toUpperCase().length()));
A. 将“Z”转换为整数90,并打印“90”
B. 运行时异常
C. 打印“z”
D. 打印“Z”
**正确答案:B
**运行时会抛出异常。线程”main”中的异常java.lang.StringIndexOutOfBoundsException: String index out of range: 16。这是因为索引值从0开始。
以下语句的输出将会是什么?
String s = "Java String Quiz";
System.out.println(s.substring(5,3));
A. 打印“Str”
B. 运行时异常
C. 索引越界运行时异常
D. 字符串索引越界编译时错误
选择所有有效的String类方法。
A. 剪裁
B. 内部化
C. 转换为小写
D. 分割
正确答案:A和B
String类的有效方法有- trim()、intern()、toLowerCase()和split(String regex)。
4. 以下语句的输出将会是什么?
String s1 = "Cat";
String s2 = "Cat";
String s3 = new String("Cat");
System.out.print(s1 == s2);
System.out.print(s1 == s3);
A. 真假
B. 真真
C. 假假
D. 假真
然而,使用new操作符,我们强制String类在堆空间中创建一个新的字符串对象。因此s1和s2将引用池中的同一个字符串,而s3将是池外的另一个对象,因此产生了这个输出。
以下哪些陈述对于switch case中的字符串是正确的?
A. 从Java 1.5或更高版本开始,switch case语句中允许使用字符串。
B. 从Java 1.7或更高版本开始,switch case语句中允许使用字符串。
C. switch-case实现中使用了equals()方法,因此添加null检查以避免空指针异常。
正确答案:B,C
阅读更多关于Java switch case字符串的内容
6. 以下哪些陈述对于StringBuffer和StringBuilder是正确的?
A. StringBuilder 不是线程安全的。
B. StringBuffer 是线程安全的,因为它的方法是同步的。
C. StringBuilder 在 Java 1.4 版本中被引入。
D. StringBuffer 和 StringBuilder 都是不可变的。
正确答案:A、B
StringBuffer对象是线程安全的,因为它的方法是同步的。但是在大多数情况下,这是一种开销,因此在Java 1.5中引入了StringBuilder。StringBuilder不是线程安全的。StringBuffer和StringBuilder都是可变的类。请在String vs StringBuffer vs StringBuilder中了解更多信息。
7. 字符串的实现遵循以下哪种设计模式?
A. 享元设计模式
B. 工厂模式
C. 单例模式
D. 以上都不是
正确答案:A
字符串池实现遵循享元设计模式。
以下语句的输出将是什么?
String s1 = "abc";
String s2 = "def";
System.out.println(s1.compareTo(s2));
A. 零
B. 真
C. 负三
D. 假
this.charAt(k)-anotherString.charAt(k)
在我们的例子中,“abc”在“def”之前,因此返回一个负整数。然后找到第一个不同字符的最小索引,即0,同时a和d相差-3。
9. 以下程序的输出结果会是什么?
public class Test {
public static void main(String[] args) {
String x = "abc";
String y = "abc";
x.concat(y);
System.out.print(x);
}
}
A. abc – 世界
B. abcabc – 果园果园
C. null – 未定义
正确答案:A
x.concat(y) 将创建一个新的字符串,但它没有分配给 x,所以 x 的值并未改变。
以下程序将输出什么?
public class Test {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
System.out.println("s1 == s2 is:" + s1 == s2);
}
}
A. 错误
B. s1 == s2 是真的
C. s1 == s2 是假的
D. 真的
正确答案:A
给定的语句的输出结果将是“false”,因为在Java中,”+”运算符的优先级高于”==”运算符。因此,给定的表达式将被计算为“s1 == s2 is:abc” == “abc”,即为false。
11. 以下语句的输出将是什么?
String s = "Java"+1+2+"Quiz"+""+(3+4);
System.out.println(s);
A. Java3Quiz7 –
答案:A. Java3测验7
B. Java12测验7
C. Java12测验34
D. Java3测验34
“Java”+1+2+“Quiz”+“”+(3+4)
= “Java”+1+2+“Quiz”+“”+7
= “Java1”+2+“Quiz”+“”+7
= “Java12”+“Quiz”+“”+7
= “Java12Quiz”+“”+7
= “Java12Quiz”+7
= “Java12Quiz7”
12. 在下面的语句中创建了多少个String对象?
String s = "abc"; // statement 1
String s1 = new String("abcd"); // statement 2
A. 一
B. 二
C. 三
D. 四
正确答案:C
在语句1中,“abc”被创建在字符串池中。
在语句2中,首先在字符串池中创建了“abcd”。然后它作为参数传递给String的new运算符,另一个字符串在堆内存中被创建。
因此总共创建了3个字符串对象。
以下语句将输出什么内容?
String s1 = "abc";
String s2 = new String("abc");
System.out.print(s1==s2);
System.out.println(s1==s2.intern());
A. 真假
B. 假假
C. 真真
D. 真假
正确答案:A
字符串s1在字符串池中,而s2在堆内存中创建。
因此s1==s2将返回false。
当调用s2.intern()方法时,它会检查字符串池中是否有“abc”值的字符串。因此它返回s1的引用。现在s1和s2都指向同一个字符串实例。
因此s1==s2.intern()将返回true。
选择所有由String类实现的接口。
A. 可序列化的
B. 可比较的
C. 警官
D. 可克隆的
正确答案:A, B, C
String是可序列化和可比较的。Constable是Java 12发布的一个新接口。
选择所有使String成为Map键的理由。
A. 字符串是不可变的
B. 字符串是最终的
C. 字符串正确实现了hashCode() 和 equals() 方法
C. 字符串的hashCode被缓存
**正确答案:A,B,C
**
对于 Map 的键,正确实现 hashCode() 和 equals() 方法是必须的。由于该字符串是 final 和不可变的,所以不存在键数据损坏的可能。
16. 以下代码片段的输出将是什么?
String s1 = new String("java");
String s2 = new String("JAVA");
System.out.println(s1 = s2);
A. Java
B. Java
C. 真
D. 假
17. 以下语句的输出将是什么?
String s1 = "abc";
StringBuffer s2 = new StringBuffer(s1);
System.out.println(s1.equals(s2));
A. 错误
B. 正确
C. 运行时的ClassCastException
D. 编译时错误
正确答案:A
它会打印出false,因为s2不是String类型。如果你看一下String的equals()方法的实现,你会发现它使用instanceof运算符进行检查,以检查传入的对象的类型是否是String?如果不是,则返回false。
18. 以下代码片段的输出结果将会是什么?
String s1 = "abc";
String s2 = new String("abc");
s2.intern();
System.out.println(s1 == s2);
A. 错误
B. 正确
C. 无值
19. 选择所有继承了String类的类。 String de .)
A. StringBuffer – 字符串缓冲器
B. StringBuilder – 字符串生成器
C. StringWriter – 字符串写入器
D. None – 无
**正确答案:D**
这是一个棘手的问题。String类是final类,所以无法通过继承来扩展它。
以下哪些关于Java中的String字符串的陈述是正确的?
A. 我们可以像StringBuffer一样扩展String类。
B. String类在java.util包中定义。
C. 在Java中,String是不可变的。
D. 在Java中,String是线程安全的。
E. 在Java中,String对大小写敏感。
21. 以下语句的输出将是什么?
String s1 = null;
System.out.print(s1); // line 2
System.out.print(s1.toString()); // line 3
A. 空值空值
B. 空值跟随NullPointerException
C. NullPointerException
正确答案:B
第2行会打印出null,因为print方法有一个空值检查,如下所示:
如果(s == null) { s = “null”; }
第3行将抛出NullPointerException,因为我们试图在空值上调用toString()函数。
结论
我在这份测验中试图涵盖字符串的大部分重要内容。如果你认为有一些有趣的概念被遗漏了,请通过评论告诉我。如果你喜欢这份测验,也请与他人分享。