ETH官方钱包

創(chuàng)作內(nèi)容

0 GP

Lesson5 : 物件的建立與初始化(含記憶體概述)

作者:game2002│2010-06-02 20:55:20│巴幣:0│人氣:992
單元目標
 
1. 宣告,實例化及初始化物件
2. 比較相對於"基本變數(shù)"來說,"物件參考變數(shù)"如何存在於記憶體之中
3. 使用String 類別
 
宣告,實例化及初始化物件
 
語法:
ClassName identifier = new ClassName();
 
ClassName : 指新物件所要參考的類別
identifier :       變數(shù)名稱
new :              new將從類別中建立物件實體
ClassName :  新物件的類別
 
H : 我知道光看上面很難看懂,或許看看實例會比較有幫助.
 
實例:
public class Employee
{
          public int id;
          public void info()
          {
                    System.out.println(id);
          }
}
 
public class EmployeeTest
{
          public static void main(String[] args)
          {
                     Employee emp = new Employee();
/*我建了一個叫emp的變數(shù) , 這個emp變數(shù)是參考
  Employee類別 , 所以接下來 emp 變數(shù)可以套用 id
  這個名稱 , 並指派1這個值 , 而1這個值將會被代入
  Employee 類別的id 變數(shù)內(nèi).*/
                     emp.id=1;
          }
}
 
H : 如果真的還是搞不懂 , 那就想成如果兩個類別之間要共用同一個變數(shù),
      則必須進行"宣告與初始化物件參考"的行為.  "宣告與初始化物件參考"
      就是上面講的那段語法. 完成上面的動作,才可以將資料或是數(shù)值帶入新的變數(shù)之中.
 
 
使用String物件
 
String是一個物件,能提供儲存一連串的字元.至於它該如何使用? 請看下面的說明.
1. 使用new 關(guān)鍵字建立String物件
    我們可以使用new關(guān)鍵字來建立並初始化String物件,並同時定義一串字元給它作為初始化.
    例如 : String myName = new String("HHH");
              [型別]    [變數(shù)]      [新建][物件] [指派的字串]
    上面的例子是,我們使用了new來建立一個新的String物件,物件的變數(shù)稱為myName , 而指派給
    變數(shù)myName作為初始化的字串,是HHH字串.
 
2. 不使用new 關(guān)鍵字建立String物件
    String可以允許不使用new關(guān)鍵字建立新物件.
    例如 : String myName = "HHH";
   
H : 那使不使用new有差嗎?答案是有差,下面的記憶體概述會來討論這一部分.
 
Java 與記憶體概述
 
電腦的記憶體分為兩區(qū),作為儲存Java程式之用.一是堆疊記憶體(stack)區(qū),另一是堆積記憶體區(qū)(heap).
一般而言,程式中的"區(qū)域變數(shù)"會儲存在stack中, "物件"及"屬性變數(shù)"的"資訊"則會儲存在heap中.
 
接下來回到String物件的論述,有沒有使用new 關(guān)鍵字,將會影響"儲存資訊"的記憶體位址,
記憶體位址不同,將會影響程式判斷的結(jié)果.
 
範例1. 請問下面的程式執(zhí)行後,會出現(xiàn)false 或是true ?
public class Test
{
          public static void main(String[ ] args)
          {
                    String a = new String("HHH");
                    String b = new String("HHH");
                    System.out.println(a==b);
          }
}
 
ANS : 會出現(xiàn)false. 因為使用new關(guān)鍵字,會在heap記憶體中存取一塊新的位址,所以上面的範例我們?yōu)?/div>
          a與b兩個變數(shù)在heap記憶體中建了兩個新的位址, 在Java中有個法則,就是Java在物件的比對上,
          比較的是物件資訊的位址,因為上例中a與b的位址不同,所以對Java來說,a與b是兩個不同的變數(shù).
 
範例2. 請問下面的程式執(zhí)行後,會出現(xiàn)false 或是true ?
public class Test
{
          public static void main(String[ ] args)
          {
                     String a = "HHH";
                     String b = "HHH";
                     System.out.println(a==b);
          }
}
 
ANS : 會出現(xiàn) true ,因為若沒有使用new關(guān)鍵字建立的物件,其儲存資訊會被納入heap記憶體的字串
          儲存池. 因此, 因為a 與 b 兩個變數(shù)沒有使用new關(guān)鍵字,所以儲存資訊HHH會被納入heap記憶
          體的字串儲存池, 還記得上面提到的Java法則嗎? Java在物件的比對上,比較的是物件資訊的位址,
          既然a與b的物件資訊其位址都是字串儲存池,那麼Java便會將a與b變數(shù)視為相同的物件.
 
H : 那如果有人問,我就是要比對物件資訊本身的內(nèi)容,
     變數(shù)a既然被指派了HHH字串給它,b也被指派了
     字串HHH給它,有沒有辦法強迫Java 去比對HHH這個字串本身的內(nèi)容就好呢?
     答案是有的,可以使用 .equals() 來解決.範例如下:
 
範例3. 請問下面的程式如何讓判斷結(jié)果為true ?
public class Test
{
          public static void main(String[ ] args)
          {
                     String a =new String("HHH");
                     String b = "HHH";
                     System.out.println();
          }
}
 
ANS :  填入 .equals , 變成 a.equals(b),所以正確的程式如下:
public class Test
{
          public static void main(String[ ] args)
          {
                     String a =new String("HHH");
                     String b = "HHH";
                     System.out.println(a.equals(b));
          }
 
 
 
 
 
引用網(wǎng)址:http://www.jamesdambrosio.com/TrackBack.php?sn=341278
All rights reserved. 版權(quán)所有,保留一切權(quán)利

相關(guān)創(chuàng)作

同標籤作品搜尋:Java|String|heap|stack

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★gameculb2002 可決定是否刪除您的留言,請勿發(fā)表違反站規(guī)文字。

前一篇:Lesson4 : 宣告... 後一篇:Lesson6 : 使用...


face基於日前微軟官方表示 Internet Explorer 不再支援新的網(wǎng)路標準,可能無法使用新的應(yīng)用程式來呈現(xiàn)網(wǎng)站內(nèi)容,在瀏覽器支援度及網(wǎng)站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現(xiàn)和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業(yè)系統(tǒng)版本才可使用)

face我們了解您不想看到廣告的心情? 若您願意支持巴哈姆特永續(xù)經(jīng)營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學(xué)】