string 是我們在開發中經常用的, 比較值時我們大多用 equals;當然也有apache的工具類等等,但面試中總會問一些 string == 比較的問題;
先舉個栗子 ;
string nice = "nice";
string ni = "ni";
string ce = "ce";
string str = new
string("nice");
system.out.println(nice ==ni+ce);
system.out.println(nice == "nice");
system.out.println(nice == ni+"ce");
system.out.println(str == nice);
如上看看是否和你的預想的結果一樣呢;
false
true
false
false
好了,開始解答;
首先區分 string st = 「abc」, string st = new string(「abc」)
前者的值存在在堆記憶體的永久代中的字串常量池中, 後者則是堆記憶體中 和常量池中都建立了 , 但引用的是堆中的值(注意 不是常量池中的值);所以 位址不同 肯定是 false 的。 也就是如上的 第四個輸出;
再來看 nice == ni+」ce」 和 nice ==ni+ce;
你一定在想沒有new的話,肯定在常量池中,常量池內部是使用 equals 來比較是否一致,如果一致則可以引用,不一致(也就是不存在)才新建;但是ni +」ce」的操作是 1個引用 和1 個字面值, 相加在堆中會產生乙個字串物件,(個人理解,如果操作含有乙個或乙個以上的字串引用時,則會在堆中建立乙個字串物件) 所以最後和 字串常量池中的」nice」比較 還是false ;
nice == 「nice」
理解了前面兩個 這個就好理解, 都是在字串常量池中,所以位址相同 true;
string和CString 的比較
一 概述 string和cstring均是字串模板類,string為標準模板類 stl 定義的字串類,已經納入c 標準之中 cstring typedef cstringt cstring 為visual c 中最常用的字串類,繼承自c stringt類,主要應用在mfc和atl程式設計中,主要資料...
String賦值的方式比較
string的賦值原則 1 new方式賦值的話,首先到pool中查詢是否有相應的值,假如沒有,在pool中建立這個物件 有的話,就到堆中例項化該物件,然後返回物件記憶體位址。2 字面值方式賦值的話,直接在pool中查詢,假如有的話,返回該物件 沒有的話,在pool中建立這個物件。例項1 結果 fal...
比較String位址相等
比較string值相等和位址相等 package com public class a 比較結果如下 true false true false true false true false true true true true false true 得到的結論 1.new出來的string是重新分...