String類筆試面試題

2021-03-04 09:15:15 字數 2421 閱讀 9826

字串物件是一種特殊的物件.string類是乙個不可變的類..也就說,string物件一旦建立就不允許修改

string類有乙個對應的string池,也就是 string 池.每乙個內容相同的字串物件都對應於乙個池裡的物件.

1 看下面一段**.

string s = new string("abc");

string s1 = "abc";

string s2 = new string("abc");

system.out.println(s == s1);

system.out.println(s == s2);

system.out.println(s1 == s2);

請問前面三條語句分別建立了幾個物件,分別是什麼.後面的輸出分別是什麼

(1)string s = new string("abc"); 這句,建立了兩個物件..其內容都是"abc".注意,s不是物件,只是引用.只有new生成的才是物件.

建立的流程是,首先括號裡的"abc"先到string 池裡看有沒"abc"這個物件,沒有則在池裡建立這個物件..所以這裡就在池建立了乙個"abc"物件.然後通過new語句又建立了乙個"abc"物件..

而這個物件是放在記憶體的堆裡. .這裡的s指向堆裡的物件.

(2) string s1 = "abc"; 這條語句,s1當然還是引用.沒啥可說的.後面的"abc".

其實就是上面括號裡的"abc".執行的是相同的操作.即在池裡查詢有沒"abc"這個物件.

沒有則建立乙個...很顯然,第一條語句在池裡已經建立了乙個"abc".所以這條語句沒有建立物件,s1指向的是池中的"abc"

(3)string s2 = new string("abc"); 這條語句,其實和第一條是一樣的,但是,因為第一條已經在池中建立了"abc"這個物件,所以,這條語句建立了乙個物件.s2指向的是堆裡的"abc".注意,雖然內容都是"abc",s與s2表示的是不同的物件

(4)接下來就很好說了.下面的三個==判斷.(注意,==永遠是判斷記憶體位址是否相等) s與s1,乙個指向堆裡的物件,乙個指向池裡的.

很明顯是不同的物件.s與s2.上面說了,雖然都是指向堆裡的物件,內容也是"abc",但是也不是相同的物件.

s1與s2.乙個指向池,乙個指向堆.也不是相同的物件.

所以三個都返回false.

2 第二個問題

string s = new string("abc");

string s1 = "abc";

string s2 = new string("abc");

system.out.println(s == class="txt">system.

out.println(s == class="txt">system.out.

println(s1 == class="txt">求最後輸出是什麼

解答.最後的答案是 false false true

intern()方法.按照jdk的幫助文件來說,是返回字串物件的規範化表示形式。通俗一點說,就是返回對應這個字串內容的那個池裡的物件.這樣說也許還看不太明白,那可以拿具體例子來說

他的執行流程是,在池裡去查詢s1對應的內容(也就是"abc").如果找到,則返回池裡的物件.如果沒有(老實說,我沒想到有哪種情況是沒有的),則在池建立這個物件,並返回...

這樣就很容易理解了.返回的是池裡的"abc"物件.與s這個堆裡的物件肯定不同,返回false.同理,s與也肯

定不同,返回false.第三個,s1與其中返回的是池中的"abc"物件,而s1也是指向池中的"abc"物件.所以返回的是true:

3第三個問題

string hello = "hello";

string hel = "hel";

string lo = "lo";

system.out.println(hello == "hel" + "lo");

system.out.println(hello == "hel" + lo);

求輸出的結果解答 true false

首先,上面已經說明了,hello hel lo這三個都是指向池中的物件..

現在我們考慮"hel" + "lo" 按照內容來說,兩個相加也就是"hello".這個時候,這個會返回池中的"hello"物件.所以,hello == "hel" + "lo" 返回的是true .

而"hel" + lo 雖然內容也是"hello",但是它將在池裡面生成乙個"hello"對池,並返回這個物件...所以這裡的結果是false

總結一下就是,如果加號兩邊的是字面值(字面值就是直接在""裡寫的值,比如上面的"hel"與"lo"),那麼將在池裡查詢有沒對應內容的物件(這裡的內容就是"hello"),並返回池裡的物件.這和hello是一樣的....

如果加號兩邊不滿足上面的條件(比如,兩邊的值是引用值或者堆裡的字串物件).那麼將不會再池裡查詢"hello",而是直接在堆裡生成乙個新的物件...

銀監會法律類筆試面試題

2009年 法律崗 1 我國處理問題銀行都有哪些法律和依據?2 加入wto對我國銀行立法的影響 2011年專業課考試 筆試 專業筆試 英語筆試 專業筆試 分為單選 多選 判斷 案例分析和論述題。單選 20題,每題1分 多選 10題,每題2分 判斷 10題,每題2分 很像司法考試題,但是不如司考題複雜...

linux arm筆試面試題

填空題1.在linux系統中,以方式訪問裝置 2.linux核心引導時,從檔案中讀取要載入的檔案系統。3.linux檔案系統中每個檔案用來標識。4.全部磁碟塊由四個部分組成,分別為 5.鏈結分為 和 6.超級塊包含了和等重要的檔案系統資訊。7.某檔案的許可權為 drw r r 用數值形式表示該許可權...

招聘筆試面試題目大全 教師教育類

一 基本練習題 一 填空題 1.職業道德是職業範圍內的 是 和 在各個職業領域內的具體體現。2.教師道德是一種 它的基本含義就是,教師在 的指導下,通過 逐步形成並必須遵循的 和 的總和。3.教師職業道德的基本內容有 4.教師最基本的職業道德是 教師職業道德的核心是 5.忠於人民的教育事業,要求教師...