總結昨天遇到的乙個string型別的知識
在記錄題目之前先補充幾個知識點
1.string a=「abc」;與string b=new string("abc");
此時的變數a、b兩個物件不相等。 a==b不成立 但是 a.equal(b)成立
並且無論a,b的定義位置如何,都不會影響到該結論
2.string a="abc";
string b=new string("abc") 新建乙個物件,中間有乙個物件的問題。由物件引用指向字串常量池中的某乙個字串
string c=a; 將字串常量池中的某個字串位址賦給變數c。注意中間沒有物件池的問題。
string d=b; 將物件池中的物件引用賦給變數d 注意這個賦值不直接涉及到字串常量池
string e="a"+"bc"; 在編譯的過程中就已經將其便以為字串abc ,相當於直接把字串abc賦值給變數e
string f="a";
a、b、c、d、e、h幾個物件之間的equal 成立(成立的意思是兩兩之間的equal的值為true)
對於== 說明
a!=b 新建的物件跟原來的物件不一樣。
c==a
d==a
d!=a
e==a
h!=a
3.intern() 粗略說明一下
當a.intern()時,當字串常量池中存在變數a物件的字串時,返回字串常量池中的字串;如果不存在該字串,則將此物件新增到字串常量池中,並返回剛新增的字串物件的引用
假設字串常量池中存在字串"number",不存在字串"number1";
如果變數 a string a="number"; 則a直接取自字串常量池中的字串number ,並返回的是字串的引用賦值給變數a 。(假設 string a= "number1"; 則需要在字串常量位址池中新增乙個字串number1,變數a 等於新新增的字串number1的引用)
變數 b string b=new string("number");
當變數c string c=a.intern(); 由於變數a已經定義並賦值,a.intern()會返回字串常量池中的字串「number」。
當變數d string d="number1".intern();由於字串常量池中不存在字串number1,所以會先把字串number1存入字串常量池中,然後,把剛新增的字串number1返回
Java String型別如何判斷相等?
最初我寫的是 輸入乙個string類的變數,如果它既不是a 也不是b,那就報錯,重新輸入。我寫的 是 scanner sc new scanner system.in system.out.print 請輸入種類 a或b string type sc.next if type a type b if...
Java String型別資料的位元組長度
問題描述 向oracle資料庫中一varchar2 64 型別欄位中插入一條string型別資料,程式使用string.length 來進行資料的長度校驗,如果資料是純英文,沒有問題,但是如果資料中包含中文,校驗可以通過,但是在資料入庫時經常會報資料超長。問題分析 既然問題是資料超長,那麼問題應該就...
java String 連線問題
string s new string hello 與 string s2 hello 建立的區別 對於string s2 hello 現在棧中建立乙個 string 物件引用的變數 s,然後查詢 hello 字串是否被儲存在常量池中,如果沒有則會將 hello 放入常量池,最後s 將指向這個物件位...