Java 字串測驗

歡迎來到 Java 字串測驗。字串是 Java 中最重要的類之一。如果您在 Java 中有任何編程經驗,您一定會使用過它。

當談到 Java 面試問題或測驗時,字串是非常受歡迎的。因此,我收集了一些很棒且棘手的 Java 字串測驗問題,您應該試試看。

Java 字串測驗

這個測驗有 21 個問題。如果您能正確回答 15 個或更多,那麼您在字串概念上算是非常優秀的。您可以點擊每個問題後的“顯示答案”按鈕,查看答案和詳細說明。

讓我們開始進行字串測驗,祝您好運。

1. 以下語句的輸出是什麼?

String s = "Java String Quiz";
System.out.println(s.charAt(s.toUpperCase().length()));

A. Convert “Z” to int 90 and prints “90”
B. Runtime Exception
C. Prints “z”
D. Prints “Z”

Click to Reveal Answer

**正確答案:B
**
它將拋出運行時異常。Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 16,這是因為索引值從 0 開始。

2. 以下語句的輸出是什麼?

String s = "Java String Quiz";
System.out.println(s.substring(5,3));

A. Prints “Str”
B. Runtime Exception
C. IndexOutOfBoundsException Runtime Exception
D. StringIndexOutOfBoundsException Compile-time error

Click to Reveal Answer

**正確答案:B
**
它將拋出運行時異常,錯誤消息為 Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 5, end 3, length 16。這是因為結束索引小於開始索引。

3. 選擇所有有效的 String 類方法。

A. trim()
B. intern()
C. toLower()
D. split()

Click to Reveal Answer

正確答案: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. truefalse
B. truetrue
C. falsefalse
D. falsetrue

Click to Reveal Answer

** 正確答案:A
**
當我們使用雙引號創建一個字符串時,它首先在字符串池中查找具有相同值的字符串。如果找到,則返回引用,否則在池中創建一個新的字符串,然後返回引用。

然而,使用new運算符,我們強迫String類在堆空間中創建一個新的字符串對象。所以s1和s2將引用池中的同一個字符串,而s3將是池外的不同對象,因此輸出不同。

5. 以下哪些語句對於switch case中的字符串是正確的?

A. String is allowed in switch case for Java 1.5 or higher versions.
B. String is allowed in switch case for Java 1.7 or higher versions.
C. The equals() method is used by switch-case implementation, so add null check to avoid NullPointerException.

Click to Reveal Answer

正確答案:B,C

更多信息請參閱java switch case string

6. 以下哪些語句對於StringBuffer和StringBuilder是正確的?

A. StringBuilder is not thread-safe.
B. StringBuffer is thread safe because its methods are synchronized.
C. StringBuilder was introduced in Java 1.4
D. StringBuffer and StringBuilder are immutable.

Click to Reveal Answer

正確答案:A,B

StringBuffer對象是線程安全的,因為它的方法是同步的。但在大多數情況下,這是一種開銷,因此在Java 1.5中引入了StringBuilder。StringBuilder不是線程安全的。StringBuffer和StringBuilder都是可變的類。詳情請參閱String vs StringBuffer vs StringBuilder

7. String的實現遵循以下哪種設計模式?

A. Flyweight Design Pattern
B. Factory Pattern
C. Singleton Pattern
D. None of the above

Click to Reveal Answer

正確答案:A

字串池的實現遵循享元設計模式

8. 下面的語句的輸出是什麼?

String s1 = "abc";
String s2 = "def";
System.out.println(s1.compareTo(s2));

A. 0
B. true
C. -3
D. false

Click to Reveal Answer

**正確答案:C
**
從String compareTo()方法的文檔中可以看到:

compareTo方法按字典順序比較兩個字符串。比較基於字符串中每個字符的Unicode值。將由該String對象表示的字符序列與參數字符串表示的字符序列按字典順序進行比較。如果這個String對象在字典順序上在參數字符串之前,則結果是一個負整數。如果這個String對象在字典順序上在參數字符串之後,則結果是一個正整數。如果字符串相等,則結果為零;當equals(Object)方法返回true時,compareTo返回0。

<diy10這是字典排序的定義。如果兩個字符串不同,那麼它們在某個對兩個字符串都有效的索引處具有不同的字符,或者它們的長度不同,或者兩者都不同。如果它們在一個或多個索引位置上具有不同的字符,讓k是最小的這樣的索引;然後字符在位置k上的值較小的那個字符串,根據字典順序使用<運算符,在這種情況下,compareTo返回兩個字符串在位置k的字符值的差異,即該值:

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

Click to Reveal Answer

正確答案:A

“x.concat(y)”將創建一個新的字符串,但它沒有被分配給x,所以x的值不會改變。

10. 以下程式的輸出將是什麼?

public class Test {
	public static void main(String[] args) {
		String s1 = "abc";
		String s2 = "abc";
		System.out.println("s1 == s2 is:" + s1 == s2);
	}
}

A. false
B. s1 == s2 is:true
C. s1 == s2 is:false
D. true

Click to Reveal Answer

正確答案:A

給定的語句的輸出將是“false”,因為在Java中,“+”運算符的優先級高於“==”運算符。因此,給定的表達式將被求值為“s1 == s2 is: abc” == “abc”,即false。

11. 以下語句的輸出將是什麼?

String s = "Java"+1+2+"Quiz"+""+(3+4);
System.out.println(s);

A. Java3Quiz7
B. Java12Quiz7
C. Java12Quiz34
D. Java3Quiz34

Click to Reveal Answer

正確答案:B

首先,執行括號中的表達式。然後是所有的“+”運算符,所以它們從左到右執行。

我們通過每次連接得到字符串,因此輸出如下所示。

“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 s = "abc"; // statement 1
String s1 = new String("abcd"); // statement 2

A. 1
B. 2
C. 3
D. 4

Click to Reveal Answer

正確答案:C

在語句1中,“abc”在字符串池中被創建。

第2個語句中,首先在字符串池中創建了”abcd”。然後將其作為參數傳遞給String new運算符,另一個字符串在堆內存中被創建。

因此總共創建了3個字符串對象。

13. 下面語句的輸出是什麼?

String s1 = "abc";
String s2 = new String("abc");
System.out.print(s1==s2);
System.out.println(s1==s2.intern());

A. falsetrue
B. falsefalse
C. truetrue
D. truefalse

Click to Reveal Answer

正確答案:A

s1在字符串池中,而s2在堆內存中創建。

因此s1==s2將返回false。

當調用s2.intern()方法時,它會檢查字符串池中是否有值為”abc”的字符串。因此它返回s1的引用。現在s1和s2都指向同一個字符串實例。

因此s1==s2.intern()將返回true。

14. 選擇所有String類實現的接口。

A. Serializable
B. Comparable
C. Constable
D. Cloneable

Click to Reveal Answer

正確答案:A,B,C

String是可序列化和可比較的。Constable是Java 12版本中的新接口。

15. 選擇所有使String成為Map鍵的原因。

A. String is immutable
B. String is final
C. String properly implements hashCode() and equals() method
C. String hashcode is cached

Click to Reveal Answer

**正確答案: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. true
D. false

Click to Reveal Answer

**正確答案:A
**
它將打印”JAVA”,因為println()方法中的參數是一個賦值語句。所以它將被視為System.out.println("JAVA")

17. 下面語句的輸出是什麼?

String s1 = "abc";
StringBuffer s2 = new StringBuffer(s1);
System.out.println(s1.equals(s2));

A. false
B. true
C. ClassCastException at runtime
D. Compile-time error

Click to Reveal Answer

正確答案: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. false
B. true
C. null

Click to Reveal Answer

正確答案:A

這是一個棘手的問題,輸出將是false。我們知道intern()方法將返回字符串池中的字符串對象引用,但由於我們沒有將其分配回s2,所以s2沒有變化。因此s1和s2都具有不同的引用。

如果我們將第3行的代碼更改為s2 = s2.intern();,則輸出將為true。

19. 選擇所有擴展String類的類。

A. StringBuffer
B. StringBuilder
C. StringWriter
D. None

Click to Reveal Answer

**正確答案:D
**
這是一個棘手的問題。String是一個final類,所以你不能擴展它。

20. 關於Java中的String,以下哪些陳述是真實的?

A. We can extend String class like StringBuffer does it.
B. String class is defined in java.util package.
C. String is immutable in Java.
D. String is thread-safe in Java.
E. String is case sensitive in Java.

Click to Reveal Answer

正確答案:C、D、E

我們無法擴展String類,因為它是final的。StringBuffer沒有擴展它。String類定義在java.lang包中。字符串是不可變的,因此在Java中是線程安全的。字符串區分大小寫,因此“abc”不等於“ABC”。

21. 以下語句的輸出將是什麼?

String s1 = null;
System.out.print(s1); // line 2
System.out.print(s1.toString()); // line 3

A. nullnull
B. null followed by NullPointerException
C. NullPointerException

Click to Reveal Answer

正確答案:B

第2行將打印null,因為print方法有如此的空檢查:

if (s == null) { s = "null";}

第3行會拋出NullPointerException,因為我們嘗試在null上調用toString()函數。

結論

I have tried to cover most of the important points about String in this Quiz. If you think some interesting concept has been missed, please let me know through comments. If you liked the Quiz, share it with others too.

Source:
https://www.digitalocean.com/community/tutorials/java-string-quiz