一、选择题
1.观察下列代码,求最终结果(C)
String str1 = "Abc"; if(str1.equals("abc")){ System.out.println("爱Java,爱生活~"); } else { System.out.println("爱生活,爱Java~"); }
A:什么也没有输出
B:爱Java,爱生活~
C:爱生活,爱Java~
D:运行报错
2.观察下列代码,选出标号1和2的正确答案(A、C)【多选题】
char[] chs = {'h','e','l','l','o'}; String s1 = new String(chs); String s2 = new String(chs); String s3 = "hello"; String s4 = "hello"; //1 System.out.println((s1==s2)+","+(s1==s3)+","+(s3==s4)); //2 System.out.println((s1.equals(s2))+","+(s1.equals(s3))+","+(s3.equals(s4)));
A:fase,fase,true
B:false,false,false
C:true,true,true
D:true,true,false
s1和s2都是new的一个新对象,产生在堆内存,所以s1==s2比较的是两个地址,所以不正确。
s1是堆内存的地址,s3是栈里面的值,所以不正确。
s3和s4都是栈内的值,且值相等所以正确。
故//1的答案是false false true
.equals比较的是值,故s1与s2相等,s1、s3相等,s3、s4相等。
故//2的答案均为true
3.观察下列代码,选出标号1和2的正确答案(C、B)【多选题】
public static void main(String[] args) { String s1 = "abc"; String s2 = "abc"; String s3 = "ABC"; String s4 = "a"; String s5 = s4 + "bc"; String s6 = "a" + "bc"; //1 System.out.println(s1.equals(s2)+" "+s1.equalsIgnoreCase(s3)+" "+s2.equals(s5)+" "+s3.equalsIgnoreCase(s5)); //2 System.out.println((s1==s2)+" "+(s1==s3)+" "+(s2==s5)+" "+(s2==s6)); }
A: true false true true
B: true false false true
C: true true true true
D: true true true false
//1 true true 不必多说
.equals比较的是值,s5运算完的值与s2相同,故true
同理忽略大小写可得s3和s5的值也相同,故true
//2 true false 不必多说
s2==s5: s2 的内容是 "abc",而 s5 是通过 s4 + "bc" 动态创建的字符串,即使内容相同,由于 s5 是在运行时动态创建的,因此 s2==s5 的结果为 false。
s2==s6: s2 的内容是 "abc",而 s6 的内容是 "a" + "bc",由于字符串连接操作发生在编译时,并且结果 "abc" 会被放入字符串池中,因此 s2==s6 的结果为 true。
4.以下哪个选项可以获取字符串对象的长度(A)
A:public int length
B:public int length(){ ... }
C:public int size(){ ... }
D:public char charAt(int index){ ... }
解释:
A:public int length
这里的 "public int length" 实际上是指 String 类中的 length() 方法,它返回字符串的长度。但是,这是一个不完整的表示,因为缺少了括号和方法体。在实际的 Java 代码中,正确的调用方式如下:
String str = "Hello, world!";
int length = str.length(); // 正确的调用方式
其他选项的说明:
B:这是一个方法定义,但通常情况下,用户不会去定义自己的 length() 方法来覆盖 String 类中的 length() 方法。
C:size() 方法并不是 String 类定义的方法,但在某些集合类如 List 或 Map 中可能会见到。
D:charAt(int index) 是 String 类的一个方法,用于获取指定索引位置的字符,而不是获取字符串长度。
因此,最接近正确答案的是 A。但是需要注意的是,实际的 Java 代码中应该使用 str.length() 而不是 str.length。
5.以下代码反转字符串逻辑正确的是(C )
A:
String s = "12345"; for (int i = s.length(); i >= 0; i--) { s+= s.charAt(i); } System.out.println(s);
B:
String s = "12345"; for (int i = s.length()-1; i >= 0; i--) { s+= s.charAt(i); } System.out.println(s);
C:
String s = "12345"; String s2 = ""; for (int i = s.length()-1; i >= 0; i--) { s2+= s.charAt(i); } s = s2; System.out.println(s);
D:
String s = "12345"; String s2 = ""; for (int i = 0; i < s.length(); i++) { s2+= s.charAt(i); } s = s2; System.out.println(s);
6.下面关于 String 的描述不正确的是(B、D)【多选题】
A、equals()方法比较的是两个字符串的内容
B.、equals()方法比较的是两个字符串的地址和内容
C、charAt()返回的是指定的索引处的 char 值
D、length 属性代表的是字符串的长度
根据 Java 中 String 类的定义和行为,我们可以分析这些选项:
A. equals() 方法比较的是两个字符串的内容。这是正确的。String 类的 equals() 方法用于比较两个字符串是否具有相同的内容。
B. equals() 方法比较的是两个字符串的地址和内容。这是不正确的。equals() 方法只比较字符串的内容,而不是它们在内存中的地址。
C. charAt() 返回的是指定的索引处的 char 值。这是正确的。charAt() 方法返回字符串中指定索引位置的字符。
D. length 属性代表的是字符串的长度。这是不正确的。在 Java 中,String 类没有名为 length 的属性。而是有一个名为 length() 的方法来获取字符串的长度。
综上所述,不正确的描述是:
B. equals() 方法比较的是两个字符串的地址和内容
D. length 属性代表的是字符串的长度
因此,正确答案是 B 和 D。