blog.Toby

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            130 隨筆 :: 2 文章 :: 150 評(píng)論 :: 0 Trackbacks
          第3 章控制程序流程

          對(duì)一個(gè)對(duì)象進(jìn)行操作時(shí),我們真正操作的是它的句柄。所
          以倘若“從一個(gè)對(duì)象到另一個(gè)對(duì)象”賦值,實(shí)際就是將句柄從一個(gè)地方復(fù)制到另一個(gè)地方。這意味著假若為
          對(duì)象使用“C=D”,那么C 和D 最終都會(huì)指向最初只有D 才指向的那個(gè)對(duì)象。下面這個(gè)例子將向大家闡示這一點(diǎn)。
          // 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 的同時(shí)也改變了n2!這是由于無論n1 還是n2 都包含了相同的句柄,它指向相同的對(duì)象(最初
          的句柄位于n1 內(nèi)部,指向容納了值9 的一個(gè)對(duì)象。在賦值過程中,那個(gè)句柄實(shí)際已經(jīng)丟失;它的對(duì)象會(huì)由
          “垃圾收集器”自動(dòng)清除)。
          檢查對(duì)象是否相等
          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);
          }
          } ///:~
          其中,表達(dá)式System.out.println(n1 == n2)可打印出內(nèi)部的布爾比較結(jié)果。一般人都會(huì)認(rèn)為輸出結(jié)果肯定
          先是true,再是false,因?yàn)閮蓚€(gè)Integer 對(duì)象都是相同的。但盡管對(duì)象的內(nèi)容相同,句柄卻是不同的,而
          ==和!=比較的正好就是對(duì)象句柄。所以輸出結(jié)果實(shí)際上先是false,再是true。這自然會(huì)使第一次接觸的人
          感到驚奇。
          若想對(duì)比兩個(gè)對(duì)象的實(shí)際內(nèi)容是否相同,又該如何操作呢?此時(shí),必須使用所有對(duì)象都適用的特殊方法
          equals()。但這個(gè)方法不適用于“主類型”,那些類型直接使用==和!=即可。

          在任何循環(huán)語句的主體部分,亦可用break 和continue 控制循環(huán)的流程。其中,break 用于強(qiáng)行退出循環(huán),
          不執(zhí)行循環(huán)中剩余的語句。而continue 則停止執(zhí)行當(dāng)前的反復(fù),然后退回循環(huán)起始和,開始新的反復(fù)。

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

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 新河县| 民勤县| 乐亭县| 南漳县| 思南县| 兴义市| 固始县| 内黄县| 平湖市| 兰州市| 郴州市| 新邵县| 长治市| 西和县| 平果县| 保定市| 博爱县| 靖远县| 大足县| 错那县| 淄博市| 桃源县| 武鸣县| 阿拉尔市| 丰县| 丽水市| 亚东县| 龙门县| 隆安县| 桂阳县| 临沂市| 梧州市| 阳新县| 上杭县| 湖口县| 久治县| 沐川县| 庐江县| 大埔区| 白玉县| 额敏县|