blog.Toby

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            130 隨筆 :: 2 文章 :: 150 評論 :: 0 Trackbacks
          第3 章控制程序流程

          對一個對象進行操作時,我們真正操作的是它的句柄。所
          以倘若“從一個對象到另一個對象”賦值,實際就是將句柄從一個地方復制到另一個地方。這意味著假若為
          對象使用“C=D”,那么C 和D 最終都會指向最初只有D 才指向的那個對象。下面這個例子將向大家闡示這一點。
          // Assignment with objects is a bit tricky
          package c03;
          class Number {
          int i;
          }
          public class Assignment {
          public static void main(String[] args) {
          Number n1 = new Number();
          Number n2 = new Number();
          n1.i = 9;
          n2.i = 47;
          System.out.println("1: n1.i: " + n1.i +
          ", n2.i: " + n2.i);
          n1 = n2;
          System.out.println("2: n1.i: " + n1.i +
          ", n2.i: " + n2.i);
          n1.i = 27;
          System.out.println("3: n1.i: " + n1.i +
          ", n2.i: " + n2.i);
          }
          } ///:~
          正確輸出:
          1: n1.i: 9, n2.i: 47
          2: n1.i: 47, n2.i: 47
          3: n1.i: 27, n2.i: 27
          看來改變n1 的同時也改變了n2!這是由于無論n1 還是n2 都包含了相同的句柄,它指向相同的對象(最初
          的句柄位于n1 內部,指向容納了值9 的一個對象。在賦值過程中,那個句柄實際已經丟失;它的對象會由
          “垃圾收集器”自動清除)。
          檢查對象是否相等
          public class Equivalence {
          public static void main(String[] args) {
          Integer n1 = new Integer(47);
          Integer n2 = new Integer(47);
          System.out.println(n1 == n2);
          System.out.println(n1 != n2);
          }
          } ///:~
          其中,表達式System.out.println(n1 == n2)可打印出內部的布爾比較結果。一般人都會認為輸出結果肯定
          先是true,再是false,因為兩個Integer 對象都是相同的。但盡管對象的內容相同,句柄卻是不同的,而
          ==和!=比較的正好就是對象句柄。所以輸出結果實際上先是false,再是true。這自然會使第一次接觸的人
          感到驚奇。
          若想對比兩個對象的實際內容是否相同,又該如何操作呢?此時,必須使用所有對象都適用的特殊方法
          equals()。但這個方法不適用于“主類型”,那些類型直接使用==和!=即可。

          在任何循環語句的主體部分,亦可用break 和continue 控制循環的流程。其中,break 用于強行退出循環,
          不執行循環中剩余的語句。而continue 則停止執行當前的反復,然后退回循環起始和,開始新的反復。

          同樣的規則亦適用于while:
          (1) 簡單的一個continue 會退回最內層循環的開頭(頂部),并繼續執行。
          (2) 帶有標簽的continue 會到達標簽的位置,并重新進入緊接在那個標簽后面的循環。
          (3) break 會中斷當前循環,并移離當前標簽的末尾。
          (4) 帶標簽的break 會中斷當前循環,并移離由那個標簽指示的循環的末尾。
          這個方法的輸出結果是一目了然的:
          posted on 2005-12-28 19:33 渠上月 閱讀(291) 評論(0)  編輯  收藏 所屬分類: about java

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 阿图什市| 鄱阳县| 宜兰市| 沅陵县| 九龙坡区| 祁东县| 吉隆县| 建平县| 许昌县| 湘阴县| 汝阳县| 屯留县| 武平县| 克什克腾旗| 榆林市| 四会市| 牡丹江市| 连云港市| 洮南市| 华蓥市| 福州市| 墨江| 乌鲁木齐市| 望谟县| 汾阳市| 海淀区| 佛冈县| 报价| 津市市| 蒙山县| 腾冲县| 米脂县| 抚松县| 绍兴市| 宁南县| 九龙城区| 汉阴县| 佛冈县| 安达市| 浮梁县| 五大连池市|