鍏ㄩ潰鐞嗚ВString(JAVA澶嶄範)-
鍏ㄩ潰鐞嗚ВString(JAVA澶嶄範)- -
1. 棣栧厛String涓嶅睘浜?绉嶅熀鏈暟鎹被鍨嬶紝String鏄竴涓璞°€?
鍥犱负瀵硅薄鐨勯粯璁ゅ€兼槸null锛屾墍浠tring鐨勯粯璁ゅ€间篃鏄痭ull锛?
浣嗗畠鍙堟槸涓€绉嶇壒娈婄殑瀵硅薄锛屾湁鍏跺畠瀵硅薄娌℃湁鐨勪竴浜涚壒鎬с€?
2. new String()鍜宯ew String(鈥溾€?閮芥槸鐢虫槑涓€涓柊鐨勭┖瀛楃涓诧紝鏄┖涓蹭笉鏄痭ull锛?
3. String str=鈥漦vill鈥濓紱
String str=new String (鈥渒vill鈥?;鐨勫尯鍒細
鍦ㄨ繖閲岋紝鎴戜滑涓嶈皥鍫嗭紝涔熶笉璋堟爤锛屽彧鍏堢畝鍗曞紩鍏ュ父閲忔睜杩欎釜绠€鍗曠殑姒傚康銆?
甯搁噺姹?constant pool)鎸囩殑鏄湪缂栬瘧鏈熻纭畾锛屽苟琚繚瀛樺湪宸茬紪璇戠殑.class鏂囦欢涓殑涓€浜涙暟鎹€傚畠鍖呮嫭浜嗗叧浜庣被銆佹柟娉曘€佹帴鍙g瓑涓殑甯搁噺锛屼篃鍖呮嫭瀛楃涓插父閲忋€?
鐪嬩緥1锛?
String s0=鈥漦vill鈥?
String s1=鈥漦vill鈥?
String s2=鈥漦v鈥?+ 鈥渋ll鈥?
System.out.println( s0==s1 );
System.out.println( s0==s2 );
缁撴灉涓猴細
true
true
棣栧厛锛屾垜浠鐭ラ亾Java浼氱‘淇濅竴涓瓧绗︿覆甯搁噺鍙湁涓€涓嫹璐濄€?
鍥犱负渚嬪瓙涓殑s0鍜宻1涓殑鈥漦vill鈥濋兘鏄瓧绗︿覆甯搁噺锛屽畠浠湪缂栬瘧鏈熷氨琚‘瀹氫簡锛屾墍浠0==s1涓簍rue锛涜€屸€漦v鈥濆拰鈥漣ll鈥濅篃閮芥槸瀛楃涓插父閲忥紝褰撲竴涓瓧绗︿覆鐢卞涓瓧绗︿覆甯搁噺杩炴帴鑰屾垚鏃讹紝瀹冭嚜宸辫偗瀹氫篃鏄瓧绗︿覆甯搁噺锛屾墍浠2涔熷悓鏍峰湪缂栬瘧鏈熷氨琚В鏋愪负涓€涓瓧绗︿覆甯搁噺锛屾墍浠2涔熸槸甯搁噺姹犱腑鈥漦vill鈥濈殑涓€涓紩鐢ㄣ€?
鎵€浠ユ垜浠緱鍑簊0==s1==s2;
鐢╪ew String() 鍒涘缓鐨勫瓧绗︿覆涓嶆槸甯搁噺锛屼笉鑳藉湪缂栬瘧鏈熷氨纭畾锛屾墍浠ew String() 鍒涘缓鐨勫瓧绗︿覆涓嶆斁鍏ュ父閲忔睜涓紝瀹冧滑鏈夎嚜宸辩殑鍦板潃绌洪棿銆?
鐪嬩緥2锛?
String s0=鈥漦vill鈥?
String s1=new String(鈥漦vill鈥?;
String s2=鈥漦v鈥?+ new String(鈥渋ll鈥?;
System.out.println( s0==s1 );
System.out.println( s0==s2 );
System.out.println( s1==s2 );
缁撴灉涓猴細
false
false
false
渚?涓璼0杩樻槸甯搁噺姹犱腑鈥漦vill鈥濈殑搴旂敤锛宻1鍥犱负鏃犳硶鍦ㄧ紪璇戞湡纭畾锛屾墍浠ユ槸杩愯鏃跺垱寤虹殑鏂板璞♀€漦vill鈥濈殑寮曠敤锛宻2鍥犱负鏈夊悗鍗婇儴鍒唍ew String(鈥渋ll鈥?鎵€浠ヤ篃鏃犳硶鍦ㄧ紪璇戞湡纭畾锛屾墍浠ヤ篃鏄竴涓柊鍒涘缓瀵硅薄鈥漦vill鈥濈殑搴旂敤;鏄庣櫧浜嗚繖浜涗篃灏辩煡閬撲负浣曞緱鍑烘缁撴灉浜嗐€?
4. String.intern()锛?
鍐嶈ˉ鍏呬粙缁嶄竴鐐癸細瀛樺湪浜?class鏂囦欢涓殑甯搁噺姹狅紝鍦ㄨ繍琛屾湡琚獼VM瑁呰浇锛屽苟涓斿彲浠ユ墿鍏呫€係tring鐨刬ntern()鏂规硶灏辨槸鎵╁厖甯搁噺姹犵殑涓€涓柟娉曪紱褰撲竴涓猄tring瀹炰緥str璋冪敤intern()鏂规硶鏃讹紝Java鏌ユ壘甯搁噺姹犱腑鏄惁鏈夌浉鍚孶nicode鐨勫瓧绗︿覆甯搁噺锛屽鏋滄湁锛屽垯杩斿洖鍏剁殑寮曠敤锛屽鏋滄病鏈夛紝鍒欏湪甯搁噺姹犱腑澧炲姞涓€涓猆nicode绛変簬str鐨勫瓧绗︿覆骞惰繑鍥炲畠鐨勫紩鐢紱鐪嬩緥3灏辨竻妤氫簡
渚?锛?
String s0= 鈥渒vill鈥?
String s1=new String(鈥漦vill鈥?;
String s2=new String(鈥渒vill鈥?;
System.out.println( s0==s1 );
System.out.println( 鈥?*********鈥?);
s1.intern();
s2=s2.intern(); //鎶婂父閲忔睜涓€渒vill鈥濈殑寮曠敤璧嬬粰s2
System.out.println( s0==s1);
System.out.println( s0==s1.intern() );
System.out.println( s0==s2 );
缁撴灉涓猴細
false
**********
false //铏界劧鎵ц浜唖1.intern(),浣嗗畠鐨勮繑鍥炲€兼病鏈夎祴缁檚1
true //璇存槑s1.intern()杩斿洖鐨勬槸甯搁噺姹犱腑鈥漦vill鈥濈殑寮曠敤
true
鏈€鍚庢垜鍐嶇牬闄や竴涓敊璇殑鐞嗚В锛?
鏈変汉璇达紝鈥滀娇鐢⊿tring.intern()鏂规硶鍒欏彲浠ュ皢涓€涓猄tring绫荤殑淇濆瓨鍒颁竴涓叏灞€String琛ㄤ腑
濡傛灉鍏锋湁鐩稿悓鍊肩殑Unicode瀛楃涓插凡缁忓湪杩欎釜琛ㄤ腑锛岄偅涔堣鏂规硶杩斿洖琛ㄤ腑宸叉湁瀛楃涓茬殑鍦板潃
濡傛灉鍦ㄨ〃涓病鏈夌浉鍚屽€肩殑瀛楃涓诧紝鍒欏皢鑷繁鐨勫湴鍧€娉ㄥ唽鍒拌〃涓€?
濡傛灉鎴戞妸浠栬鐨勮繖涓叏灞€鐨凷tring琛ㄧ悊瑙d负甯搁噺姹犵殑璇濓紝浠栫殑鏈€鍚庝竴鍙ヨ瘽锛屸€滃鏋滃湪琛ㄤ腑娌℃湁鐩稿悓鍊肩殑瀛楃涓诧紝鍒欏皢鑷繁鐨勫湴鍧€娉ㄥ唽鍒拌〃涓€濇槸閿欑殑锛?
鐪嬩緥4锛?
String s1=new String("kvill");
String s2=s1.intern();
System.out.println( s1==s1.intern() );
System.out.println( s1+" "+s2 );
System.out.println( s2==s1.intern() );
缁撴灉锛?
false
kvill kvill
true
鍦ㄨ繖涓被涓垜浠病鏈夊0鍚嶄竴涓€漦vill鈥濆父閲忥紝鎵€浠ュ父閲忔睜涓竴寮€濮嬫槸娌℃湁鈥漦vill鈥濈殑
褰撴垜浠皟鐢╯1.intern()鍚庡氨鍦ㄥ父閲忔睜涓柊娣诲姞浜嗕竴涓€漦vill鈥濆父閲忥紝鍘熸潵鐨勪笉鍦ㄥ父閲忔睜涓殑鈥漦vill鈥濅粛鐒跺瓨鍦紝涔熷氨涓嶆槸鈥滃皢鑷繁鐨勫湴鍧€娉ㄥ唽鍒板父閲忔睜涓€濅簡銆?
s1==s1.intern()涓篺alse璇存槑鍘熸潵鐨勨€渒vill鈥濅粛鐒跺瓨鍦紱
s2鐜板湪涓哄父閲忔睜涓€渒vill鈥濈殑鍦板潃锛屾墍浠ユ湁s2==s1.intern()涓簍rue銆?
5. 鍏充簬equals()鍜?=:
杩欎釜瀵逛簬String绠€鍗曟潵璇村氨鏄瘮杈冧袱瀛楃涓茬殑Unicode搴忓垪鏄惁鐩稿綋锛屽鏋滅浉绛夎繑鍥瀟rue;鑰?=鏄瘮杈冧袱瀛楃涓茬殑鍦板潃鏄惁鐩稿悓锛屼篃灏辨槸鏄惁鏄悓涓€涓瓧绗︿覆鐨勫紩鐢ㄣ€?
6. 鍏充簬String鏄笉鍙彉鐨勩€?
杩欎竴璇村張瑕佽寰堝锛屽ぇ瀹跺彧瑕佺煡閬揝tring鐨勫疄渚嬩竴鏃︾敓鎴愬氨涓嶄細鍐嶆敼鍙樹簡锛?
姣斿璇达細String str=鈥漦v鈥?鈥漣ll鈥?鈥?nbsp; 鈥?鈥漚ns鈥?
灏辨槸鏈?涓瓧绗︿覆甯搁噺锛岄鍏堚€漦v鈥濆拰鈥漣ll鈥濈敓鎴愪簡鈥漦vill鈥濆瓨鍦ㄥ唴瀛樹腑锛岀劧鍚庘€漦vill鈥濆張鍜屸€?nbsp; 鈥?鐢熸垚 鈥漦vill 鈥滃瓨鍦ㄥ唴瀛樹腑锛屾渶鍚庡張鍜岀敓鎴愪簡鈥漦vill ans鈥?骞舵妸杩欎釜瀛楃涓茬殑鍦板潃璧嬬粰浜唖tr,灏辨槸鍥犱负String鐨勨€滀笉鍙彉鈥濅骇鐢熶簡寰堝涓存椂鍙橀噺锛岃繖涔熷氨鏄负浠€涔堝缓璁敤StringBuffer鐨勫師鍥犱簡锛屽洜涓篠tringBuffer鏄彲鏀瑰彉鐨?
1. 棣栧厛String涓嶅睘浜?绉嶅熀鏈暟鎹被鍨嬶紝String鏄竴涓璞°€?
鍥犱负瀵硅薄鐨勯粯璁ゅ€兼槸null锛屾墍浠tring鐨勯粯璁ゅ€间篃鏄痭ull锛?
浣嗗畠鍙堟槸涓€绉嶇壒娈婄殑瀵硅薄锛屾湁鍏跺畠瀵硅薄娌℃湁鐨勪竴浜涚壒鎬с€?
2. new String()鍜宯ew String(鈥溾€?閮芥槸鐢虫槑涓€涓柊鐨勭┖瀛楃涓诧紝鏄┖涓蹭笉鏄痭ull锛?
3. String str=鈥漦vill鈥濓紱
String str=new String (鈥渒vill鈥?;鐨勫尯鍒細
鍦ㄨ繖閲岋紝鎴戜滑涓嶈皥鍫嗭紝涔熶笉璋堟爤锛屽彧鍏堢畝鍗曞紩鍏ュ父閲忔睜杩欎釜绠€鍗曠殑姒傚康銆?
甯搁噺姹?constant pool)鎸囩殑鏄湪缂栬瘧鏈熻纭畾锛屽苟琚繚瀛樺湪宸茬紪璇戠殑.class鏂囦欢涓殑涓€浜涙暟鎹€傚畠鍖呮嫭浜嗗叧浜庣被銆佹柟娉曘€佹帴鍙g瓑涓殑甯搁噺锛屼篃鍖呮嫭瀛楃涓插父閲忋€?
鐪嬩緥1锛?
String s0=鈥漦vill鈥?
String s1=鈥漦vill鈥?
String s2=鈥漦v鈥?+ 鈥渋ll鈥?
System.out.println( s0==s1 );
System.out.println( s0==s2 );
缁撴灉涓猴細
true
true
棣栧厛锛屾垜浠鐭ラ亾Java浼氱‘淇濅竴涓瓧绗︿覆甯搁噺鍙湁涓€涓嫹璐濄€?
鍥犱负渚嬪瓙涓殑s0鍜宻1涓殑鈥漦vill鈥濋兘鏄瓧绗︿覆甯搁噺锛屽畠浠湪缂栬瘧鏈熷氨琚‘瀹氫簡锛屾墍浠0==s1涓簍rue锛涜€屸€漦v鈥濆拰鈥漣ll鈥濅篃閮芥槸瀛楃涓插父閲忥紝褰撲竴涓瓧绗︿覆鐢卞涓瓧绗︿覆甯搁噺杩炴帴鑰屾垚鏃讹紝瀹冭嚜宸辫偗瀹氫篃鏄瓧绗︿覆甯搁噺锛屾墍浠2涔熷悓鏍峰湪缂栬瘧鏈熷氨琚В鏋愪负涓€涓瓧绗︿覆甯搁噺锛屾墍浠2涔熸槸甯搁噺姹犱腑鈥漦vill鈥濈殑涓€涓紩鐢ㄣ€?
鎵€浠ユ垜浠緱鍑簊0==s1==s2;
鐢╪ew String() 鍒涘缓鐨勫瓧绗︿覆涓嶆槸甯搁噺锛屼笉鑳藉湪缂栬瘧鏈熷氨纭畾锛屾墍浠ew String() 鍒涘缓鐨勫瓧绗︿覆涓嶆斁鍏ュ父閲忔睜涓紝瀹冧滑鏈夎嚜宸辩殑鍦板潃绌洪棿銆?
鐪嬩緥2锛?
String s0=鈥漦vill鈥?
String s1=new String(鈥漦vill鈥?;
String s2=鈥漦v鈥?+ new String(鈥渋ll鈥?;
System.out.println( s0==s1 );
System.out.println( s0==s2 );
System.out.println( s1==s2 );
缁撴灉涓猴細
false
false
false
渚?涓璼0杩樻槸甯搁噺姹犱腑鈥漦vill鈥濈殑搴旂敤锛宻1鍥犱负鏃犳硶鍦ㄧ紪璇戞湡纭畾锛屾墍浠ユ槸杩愯鏃跺垱寤虹殑鏂板璞♀€漦vill鈥濈殑寮曠敤锛宻2鍥犱负鏈夊悗鍗婇儴鍒唍ew String(鈥渋ll鈥?鎵€浠ヤ篃鏃犳硶鍦ㄧ紪璇戞湡纭畾锛屾墍浠ヤ篃鏄竴涓柊鍒涘缓瀵硅薄鈥漦vill鈥濈殑搴旂敤;鏄庣櫧浜嗚繖浜涗篃灏辩煡閬撲负浣曞緱鍑烘缁撴灉浜嗐€?
4. String.intern()锛?
鍐嶈ˉ鍏呬粙缁嶄竴鐐癸細瀛樺湪浜?class鏂囦欢涓殑甯搁噺姹狅紝鍦ㄨ繍琛屾湡琚獼VM瑁呰浇锛屽苟涓斿彲浠ユ墿鍏呫€係tring鐨刬ntern()鏂规硶灏辨槸鎵╁厖甯搁噺姹犵殑涓€涓柟娉曪紱褰撲竴涓猄tring瀹炰緥str璋冪敤intern()鏂规硶鏃讹紝Java鏌ユ壘甯搁噺姹犱腑鏄惁鏈夌浉鍚孶nicode鐨勫瓧绗︿覆甯搁噺锛屽鏋滄湁锛屽垯杩斿洖鍏剁殑寮曠敤锛屽鏋滄病鏈夛紝鍒欏湪甯搁噺姹犱腑澧炲姞涓€涓猆nicode绛変簬str鐨勫瓧绗︿覆骞惰繑鍥炲畠鐨勫紩鐢紱鐪嬩緥3灏辨竻妤氫簡
渚?锛?
String s0= 鈥渒vill鈥?
String s1=new String(鈥漦vill鈥?;
String s2=new String(鈥渒vill鈥?;
System.out.println( s0==s1 );
System.out.println( 鈥?*********鈥?);
s1.intern();
s2=s2.intern(); //鎶婂父閲忔睜涓€渒vill鈥濈殑寮曠敤璧嬬粰s2
System.out.println( s0==s1);
System.out.println( s0==s1.intern() );
System.out.println( s0==s2 );
缁撴灉涓猴細
false
**********
false //铏界劧鎵ц浜唖1.intern(),浣嗗畠鐨勮繑鍥炲€兼病鏈夎祴缁檚1
true //璇存槑s1.intern()杩斿洖鐨勬槸甯搁噺姹犱腑鈥漦vill鈥濈殑寮曠敤
true
鏈€鍚庢垜鍐嶇牬闄や竴涓敊璇殑鐞嗚В锛?
鏈変汉璇达紝鈥滀娇鐢⊿tring.intern()鏂规硶鍒欏彲浠ュ皢涓€涓猄tring绫荤殑淇濆瓨鍒颁竴涓叏灞€String琛ㄤ腑
濡傛灉鍏锋湁鐩稿悓鍊肩殑Unicode瀛楃涓插凡缁忓湪杩欎釜琛ㄤ腑锛岄偅涔堣鏂规硶杩斿洖琛ㄤ腑宸叉湁瀛楃涓茬殑鍦板潃
濡傛灉鍦ㄨ〃涓病鏈夌浉鍚屽€肩殑瀛楃涓诧紝鍒欏皢鑷繁鐨勫湴鍧€娉ㄥ唽鍒拌〃涓€?
濡傛灉鎴戞妸浠栬鐨勮繖涓叏灞€鐨凷tring琛ㄧ悊瑙d负甯搁噺姹犵殑璇濓紝浠栫殑鏈€鍚庝竴鍙ヨ瘽锛屸€滃鏋滃湪琛ㄤ腑娌℃湁鐩稿悓鍊肩殑瀛楃涓诧紝鍒欏皢鑷繁鐨勫湴鍧€娉ㄥ唽鍒拌〃涓€濇槸閿欑殑锛?
鐪嬩緥4锛?
String s1=new String("kvill");
String s2=s1.intern();
System.out.println( s1==s1.intern() );
System.out.println( s1+" "+s2 );
System.out.println( s2==s1.intern() );
缁撴灉锛?
false
kvill kvill
true
鍦ㄨ繖涓被涓垜浠病鏈夊0鍚嶄竴涓€漦vill鈥濆父閲忥紝鎵€浠ュ父閲忔睜涓竴寮€濮嬫槸娌℃湁鈥漦vill鈥濈殑
褰撴垜浠皟鐢╯1.intern()鍚庡氨鍦ㄥ父閲忔睜涓柊娣诲姞浜嗕竴涓€漦vill鈥濆父閲忥紝鍘熸潵鐨勪笉鍦ㄥ父閲忔睜涓殑鈥漦vill鈥濅粛鐒跺瓨鍦紝涔熷氨涓嶆槸鈥滃皢鑷繁鐨勫湴鍧€娉ㄥ唽鍒板父閲忔睜涓€濅簡銆?
s1==s1.intern()涓篺alse璇存槑鍘熸潵鐨勨€渒vill鈥濅粛鐒跺瓨鍦紱
s2鐜板湪涓哄父閲忔睜涓€渒vill鈥濈殑鍦板潃锛屾墍浠ユ湁s2==s1.intern()涓簍rue銆?
5. 鍏充簬equals()鍜?=:
杩欎釜瀵逛簬String绠€鍗曟潵璇村氨鏄瘮杈冧袱瀛楃涓茬殑Unicode搴忓垪鏄惁鐩稿綋锛屽鏋滅浉绛夎繑鍥瀟rue;鑰?=鏄瘮杈冧袱瀛楃涓茬殑鍦板潃鏄惁鐩稿悓锛屼篃灏辨槸鏄惁鏄悓涓€涓瓧绗︿覆鐨勫紩鐢ㄣ€?
6. 鍏充簬String鏄笉鍙彉鐨勩€?
杩欎竴璇村張瑕佽寰堝锛屽ぇ瀹跺彧瑕佺煡閬揝tring鐨勫疄渚嬩竴鏃︾敓鎴愬氨涓嶄細鍐嶆敼鍙樹簡锛?
姣斿璇达細String str=鈥漦v鈥?鈥漣ll鈥?鈥?nbsp; 鈥?鈥漚ns鈥?
灏辨槸鏈?涓瓧绗︿覆甯搁噺锛岄鍏堚€漦v鈥濆拰鈥漣ll鈥濈敓鎴愪簡鈥漦vill鈥濆瓨鍦ㄥ唴瀛樹腑锛岀劧鍚庘€漦vill鈥濆張鍜屸€?nbsp; 鈥?鐢熸垚 鈥漦vill 鈥滃瓨鍦ㄥ唴瀛樹腑锛屾渶鍚庡張鍜岀敓鎴愪簡鈥漦vill ans鈥?骞舵妸杩欎釜瀛楃涓茬殑鍦板潃璧嬬粰浜唖tr,灏辨槸鍥犱负String鐨勨€滀笉鍙彉鈥濅骇鐢熶簡寰堝涓存椂鍙橀噺锛岃繖涔熷氨鏄负浠€涔堝缓璁敤StringBuffer鐨勫師鍥犱簡锛屽洜涓篠tringBuffer鏄彲鏀瑰彉鐨?