2009年2月12日 星期四

Java小練習(16)--關於字串

題目要求: 撰寫一個名為Dog的class,並使其含有兩個公開的String : name以及says。在main()中分產生兩個Dog的物件,並將其命名為"spot",says值為"Ruff!"、以及"scruff",says值為"Wuff!"。印出他們的name以及says。 接著產生Dog的reference並且將他指派到表示spot的物件,分別使用"=="以及".equels()"來比降所有的reference。 ------------- code starts ------------------
public class Dog {

   public String name;
   public String says;

   public static void main(String[] args) {
       Dog d1 = new Dog();
       d1.name = "spot";
       d1.says = "Ruff!";

       Dog d2 = new Dog();
       d2.name = "scruffy";
       d2.says = "Wurf!";

       System.out.println("第1隻狗叫" + d1.name + ";而且他說:" + d1.says);
       System.out.println("第2隻狗叫" + d2.name + ";而且他說:" + d2.says);
       System.out.println("----------");

       System.out.println("把第2隻狗的名字指定給第1隻狗");
       d1.name = d2.name;
       System.out.println("第1隻狗叫" +d1.name);
       System.out.println("第2隻狗叫" +d2.name);
       System.out.println("兩隻狗物件的位置是否相同:" +(d1 == d2));
       System.out.println("兩隻狗名字的位置是否相同:"+(d1.name == d2.name));
       System.out.println("兩隻狗名字的內容是否相同:"+(d1.name).equals(d2.name));
       System.out.println("兩隻狗說話的內容是否相同:"+(d1.says).equals(d2.says));
       System.out.println("--------------------------");

       System.out.println("把第2隻狗整個物件指定給第1隻狗");
       d1 = d2;
       System.out.println("第1隻狗叫" +d1.name);
       System.out.println("第2隻狗叫" +d2.name);
       System.out.println("兩隻狗物件的位置是否相同:" +(d1 == d2));
       System.out.println("兩隻狗名字的位置是否相同:"+(d1.name == d2.name));
       System.out.println("兩隻狗名字的內容是否相同:"+(d1.name).equals(d2.name));
       System.out.println("兩隻狗說話的內容是否相同:"+(d1.says).equals(d2.says));

   }
}
------------- code ends ------------------ 雖然java傳值的方式是pass-by-value,對於基本型別來說容易理解,對於類別型別來說感覺上卻是pass-by-references。 不過我們可以這樣理解:java物件的pass-by-value是指記憶體的參考位置的值,所以傳遞的是reference的位置的值。很多程式設計師都說java的pass-by-value是強詞奪理,不過我們就聽聽吧!

沒有留言: