字符串基础问题
字符串基礎問題
題目一
public class Test{public static void main(String[] args){String s1 = "abc";String s2 = s1;String s3 = new String("abc");String s4 = new String("abc");String s5 = "abc";System.out.println(s1==s5);System.out.println(s1==s2);System.out.println(s1.equals(s2));System.out.println(s3==s4);System.out.println(s1.equals(s4));System.out.println(s3.equals(s4));} }輸出是 true true true false true true
記住 == 比較引用. equals 比較值. String 對象會創建一個字符串池 (a pool of string), 如果當前準備新創建的字符串對象的值在這個池子中已經存在,那么就不會生成新對象, 而是復用池中已有的字符串對象. 不過, 只有采用 Object s = “Hello” 方式 (而非用”new“關鍵字) 聲明 String 對象的時候這個規則才會被應用.
題目二
String s = "a" + "b" + "c" + "d" + "e"創建了幾個對象? 1個 賦值號右邊都是常量,編譯時直接儲存它們的字面值, 在編譯時直接把結果取出來面成了 "abcde"
題目三
# 創建了幾個String Object?二者之間有什么區別?String s = new String("xyz");兩個或一個, ”xyz”對應一個對象, 這個對象放在字符串常量緩沖區, 常量”xyz”不管出現多少遍, 都是緩沖區中的那一個. New String每寫一遍, 就創建一個新的對象, 它一句那個常量”xyz”對象的內容來創建出一個新String對象. 如果以前就用過’xyz’, 這句代表就不會創建”xyz”自己了, 直接從緩沖區拿.
題目四
String s1 = new String("777"); String s2 = "aaa777"; String s3 = "aaa" + "777"; String s4 = "aaa" + s1;s2 == S3 : true s2 == S4 : false s2 == S4.intern() : true
題目五
String str = "ABCDEFGH"; String str1 = str.substring(3,5); System.oout.println(str1);輸出是 DE substring 是前包括后不包括
題目六
執行后,原始的 String 對象中的內容到底變了沒有?String s = "Hello";s = s + " world!";沒有. 因為 String 被設計成不可變(immutable)類, 所以它的所有對象都是不可變對象.
在這段代碼中, s原先指向一個String對象, 內容是 "Hello",然后我們對s進行了+操作, 這時,s不指向原來那個對象了, 而指向了另一個 String對象, 內容為"Hello world!", 原來那個對象還存在于內存之中, 只是s這個引用變量不再指向它了.
題目七
執行后,輸出是什么? 共創建了幾個字符串對象?
String s = " Hello ";s += " World ";s.trim( );System.out.println(s);再次強調 String 是不可變(immutable)類. 所以共創建了三個對象. 最后輸出是 " Hello World ". 只有 s = s.trim() 之后才是 "Hello World".
from:?https://dongchuan.gitbooks.io/java-interview-question/java/string_questions.html
總結
- 上一篇: Java中String类的常见面试题
- 下一篇: 浅谈 Java 字符串(String,