String str1="Hello",String str2=new String("Hello")


package com.HelloWorld;
/*
String str1= "hello", String str2="he"+"llo";之所以str1==str2返回true是因為兩者都是在字符串常量池中
(由於初始化就會在此區域分布內存)而常量池中的有個與棧區類似的特性,就是當str2指向的常量在常量區已存在時,
他不會創建新的內存空間來存此常量,而是指向已有常量的內存(應該是以此節約空間),此時str1與str2這兩個引用變
量的值都是存"hello"的內存空間地址,但是String str3= "he"+a;String a="llo";時str1==str3返回的為false,
是因為:str1指向的hello在編譯期一如既往的還是分配在常量區內,a指向的llo也在常量區,雖然str3也是初始化但是
編譯器無法判斷a這貨到底是什么個情況,進而不會將str3的等號右側聲明在常量區內,而是在通過構造時在堆區中的非常
量池外的內存中聲明,至此str3與str1不止是分配內存的時期不同(一個在編譯期,一個在運行期)而且在內存空間的區
域也不同,上面最高票答案只區分了時間沒區分空間。
*/
public class StringOne {

public static void main(String[] args) {
  String str1="kobe";
  String str7="kobe";//str1與str7同時指向kobe字符串
  String str2="bryant";
  String str3="kobebryant";
  String str4="kobe"+"bryant";
  String str5="ko"+"be"+"bryant";
  String str6=str1+str2;
  System.out.println(str1==str7);//true
  System.out.println(str3==str4);//true
  System.out.println(str3==str5);//true
  System.out.println(str3==str6);//false
  System.out.println(str3.equals(str6));//true
  String str8;
  str8=str7;
  str8="ok";//str8重新指向ok字符串
  System.out.println(str1);//kobe

  }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM