1.下面程序的運行結果是()(選擇一項)
String str1="hello";
String str2=new String("hello");
System.out.println(str1==str2);
A. true
B. false
C. hello
D. he
答案:B
分析:str1沒有使用new關鍵字,在堆中沒有開辟空間,其值”hello”在常量池中,str2使用new關鍵字創建了一個對象,在堆中開辟了空間,”==”比較的是對象的引用,即內存地址,所以str1與str2兩個對象的內存地址是不相同的
2.Java語言中,String類中的indexOf()方法返回值的類型是()
A. int16
B. int32
C. int
D. long
答案:C
3.給定以下代碼,程序的運行結果是 ()(選擇一項)
public class Example {
String str=new String("good");
char [] ch={'a','b','c'};
public static void main(String[] args) {
Example ex=new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str+"and");
System.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
A. goodandabc
B. goodandgbc
C. test okandabc
D. test okandgbc
答案:B
分析:在方法調用時,在change方法中對str的值進行修改,是將str指向了常量江池中的”test ok”,而主方法中的ex.str仍然指向的是常量池中的”good”。字符型數組在方法調用時,將主方法中ex.ch的引用傳遞給change方法中的ch,指向是堆中的同一堆空間,所以修改ch[0]的時候,ex.ch可以看到相同的修改后的結果。
4.執行下列代碼后,哪個結論是正確的()(選擇兩項)
String[] s=new String[10];
A. s[10]為””
B. s[9]為null
C. s[0]為未定義
D. s.length為10
答案:BD
分析: 引用數據類型的默認值均為null
s.length數組的長度
5.實現String類的replaceAll方法
思路說明:replaceAll方法的本質是使用正則表達式進行匹配,最終調用的其實是Matcher對象的replaceAll方法。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestStringReplaceAll {
public static void main(String[] args) {
String str = "a1s2d3f4h5j6k7";
// 將字符串中的數字全部替換為0
System.out.println(replaceAll(str, "\\d", "0"));
}
/**
* @param str:源字符串
* @param regex:正則表達式
* @param newStr:替換后的子字符串
* @return 返回替換成功后的字符串
*/
public static String replaceAll(String str, String regex, String newStr) {
Pattern pattern = Pattern.compile(regex);
Matcher mathcer = pattern.matcher(str);
String reslut = mathcer.replaceAll(newStr);
return reslut;
}
}
6.在“=”后填寫適當的內容:
String []a=new String[10];
則:a[0]~a[9]=null;
a.length=10;
如果是int[]a=new int[10];
則:a[0]~a[9]= (0)
a.length= (10)
7.是否可以繼承String類?
答:不可以,因為String類有final修飾符,而final修飾的類是不能被繼承的,實現細節不允許改變。
public final class String implements java.io.Serializable,
Comparable< String>, CharSequence
8.給定兩個字符串s和t, 寫一個函數來決定是否t是s的重組詞。你可以假設字符串只包含小寫字母。
public class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length())
return false;
int bit[] = new int[26];
for(int i=0;i<s.length();i++){
bit[s.charAt(i)-'a']++;
}
for(int i=0;i<s.length();i++){
if(--bit[t.charAt(i)-'a']<0)
return false;
}
return true;
}
}
9.String s=new String(“abc”);創建了幾個String對象。
兩個或一個,”abc”對應一個對象,這個對象放在字符串常量緩沖區,常量”abc”不管出現多少遍,都是緩沖區中的那一個。New String每寫一遍,就創建一個新的對象,它一句那個常量”abc”對象的內容來創建出一個新String對象。如果以前就用過’abc’,這句代表就不會創建”abc”自己了,直接從緩沖區拿。
10.輸出結果?
String str1=“hello”;
Sring str2=“he”+new String(“llo”);
Sysem.out.println(str1==str2));
Sysem.out.println(str.equal(str2));
false
true
11.關於java.lang.String類,以下描述正確的一項是()
A. String類是final類故不可繼承
B. String類final類故可以繼承
C. String類不是final類故不可繼承
D. String;類不是final類故可以繼承
答案:A
12.下面哪個是正確的()
A. String temp[ ] = new String{“a”,”b”,”c”};
B. String temp[ ] = {“a”,”b”,”c”};
C. String temp= {“a”,”b”,”c”};
D. String[ ] temp = {“a”,”b”,”c”};
答案:BD
13.已知如下代碼:執行結果是什么()
public class Test {
public static void main(String[] args) {
String s1 = new String("Hello");
String s2 = new String("Hello");
System.out.print(s1 == s2);
String s3 = "Hello";
String s4 = "Hello";
System.out.print(s3 == s4);
s1 = s3;
s2 = s4;
System.out.print(s1 == s2);
}
}
A. false true true
B. true false true
C. true true false
D. true true false
答案:A