Java基礎知識總結(二)

來源:互聯網
上載者:User
1 String a="a";2 String b="b";3 String c="ab";4 String d="ab";5 String e=a+b;

  程式中用來存放資料的記憶體分為四塊
  1、全域區(靜態區)(static)
  2、文字常量區 :常量字串就是放在這塊地區,即是我們常說起的常量池。
  3、棧區(stack):存放函數的參數值,局部變數的值等。
  4、堆區(heap) : 存放對象

  當我們定義字串
  String a = "a";
  a在棧區,“a”是字串常量,在常量池中
  String b = "b";
  b在棧區,“b”在常量池
  String c="ab";
  c在棧區,“ab”在常量池
  String d="ab";
  d在棧區,這個時候常量池裡已經有"ab",所以直接使用已經有的那個“ab”
  所以這個時候c和d都指向的常量池裡面的同一個“ab”
  String e=a+b;
  e在棧區,a+b實際上產生了一個新的String對象,既然是String對象,所以結果“ab”放在堆區中,即e指向的是堆裡的“ab”
  這樣的情況下,c==d為true,c==e為false

  另外,如果定義的是字串對象
  String str1 = new String("ab");
  str1在棧區,建立的“ab”字串對象在堆區
  String str2 = new String("ab");
  str2在棧區,又建立的一個新的“ab”對象也在堆區,不過和剛才的“ab”不是同一個。
  相當於堆區中有兩個字串對象,不過正好內容都是“ab”而已。
  所以str1==str2為false

  常量池裡面放著的常量字串可以重複使用,但是必須是你直接使用的該字串,像a+b這種形式雖然得到的結果是“ab”,但並不是使用的字串常量“ab”

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.