麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Java變量的賦值

2019-11-18 13:23:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  賦值是用等號(hào)運(yùn)算符(=)進(jìn)行的。它的意思是“取得右邊的值,把它復(fù)制到左邊”。右邊的值可以是任何常數(shù)、變量或者表達(dá)式,只要能產(chǎn)生一個(gè)值就行。但左邊的值必須是一個(gè)明確的、已命名的變量。也就是說(shuō),它必須有一個(gè)物理性的空間來(lái)保存右邊的值。舉個(gè)例子來(lái)說(shuō),可將一個(gè)常數(shù)賦給一個(gè)變量(A=4;),但不可將任何東西賦給一個(gè)常數(shù)(比如不能4=A)。
  對(duì)主數(shù)據(jù)類型的賦值是非常直接的。由于主類型容納了實(shí)際的值,而且并非指向一個(gè)對(duì)象的句柄,所以在為其賦值的時(shí)候,可將來(lái)自一個(gè)地方的內(nèi)容復(fù)制到另一個(gè)地方。例如,假設(shè)為主類型使用“A=B”,那么B處的內(nèi)容就復(fù)制到A。若接著又修改了A,那么B根本不會(huì)受這種修改的影響。作為一名程序員,這應(yīng)成為自己的常識(shí)。
  但在為對(duì)象“賦值”的時(shí)候,情況卻發(fā)生了變化。對(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)。
  這里有一些題外話。在后面,大家在代碼示例里看到的第一個(gè)語(yǔ)句將是“package 03”使用的“package”語(yǔ)句,它代表本書(shū)第3章。本書(shū)每一章的第一個(gè)代碼清單都會(huì)包含象這樣的一個(gè)“package”(封裝、打包、包裹)語(yǔ)句,它的作用是為那一章剩余的代碼建立章節(jié)編號(hào)。在第17章,大家會(huì)看到第3章的所有代碼清單(除那些有不同封裝名稱的以外)都會(huì)自動(dòng)置入一個(gè)名為c03的子目錄里;第4章的代碼置入c04;以此類推。所有這些都是通過(guò)第17章展示的CodePackage.java程序?qū)崿F(xiàn)的;“封裝”的基本概念會(huì)在第5章進(jìn)行詳盡的解釋。就目前來(lái)說(shuō),大家只需記住象“package 03”這樣的形式只是用于為某一章的代碼清單建立相應(yīng)的子目錄。
  為運(yùn)行程序,必須保證在classpath里包含了我們安裝本書(shū)源碼文件的根目錄(那個(gè)目錄里包含了c02,c03c,c04等等子目錄)。
  對(duì)于Java后續(xù)的版本(1.1.4和更高版本),假如您的main()用package語(yǔ)句封裝到一個(gè)文件里,那么必須在程序名前面指定完整的包裹名稱,否則不能運(yùn)行程序。在這種情況下,命令行是:
  java c03.Assignment
  運(yùn)行位于一個(gè)“包裹”里的程序時(shí),隨時(shí)都要注重這方面的問(wèn)題。
  下面是例子:
  
  
  
  //: Assignment.java
  // 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.     ", 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);
   }
  } ///:~
  
  Number類非常簡(jiǎn)單,它的兩個(gè)實(shí)例(n1和n2)是在main()里創(chuàng)建的。每個(gè)Number中的i值都賦予了一個(gè)不同的值。隨后,將n2賦給n1,而且n1發(fā)生改變。在許多程序設(shè)計(jì)語(yǔ)言中,我們都希望n1和n2任何時(shí)候都相互獨(dú)立。但由于我們已賦予了一個(gè)句柄,所以下面才是真實(shí)的輸出:
  1: n1.i: 9, n2.i: 47
  2: n1.i: 47, n2.i: 47
  3: n1.i: 27, n2.i: 27
  看來(lái)改變n1的同時(shí)也改變了n2!這是由于無(wú)論n1還是n2都包含了相同的句柄,它指向相同的對(duì)象(最初的句柄位于n1內(nèi)部,指向容納了值9的一個(gè)對(duì)象。在賦值過(guò)程中,那個(gè)句柄實(shí)際已經(jīng)丟失;它的對(duì)象會(huì)由“垃圾收集器”自動(dòng)清除)。
  這種非凡的現(xiàn)象通常也叫作“別名”,是Java操作對(duì)象的一種基本方式。但假若不愿意在這種情況下出現(xiàn)別名,又該怎么操作呢?可放棄賦值,并寫(xiě)入下述代碼:
  n1.i = n2.i;
  這樣便可保留兩個(gè)獨(dú)立的對(duì)象,而不是將n1和n2綁定到相同的對(duì)象。但您很快就會(huì)意識(shí)到,這樣做會(huì)使對(duì)象內(nèi)部的字段處理發(fā)生混亂,并與標(biāo)準(zhǔn)的面向?qū)ο笤O(shè)計(jì)準(zhǔn)則相悖。由于這并非一個(gè)簡(jiǎn)單的話題,所以留待第12章具體論述,那一章是專門(mén)討論別名的。其時(shí),大家也會(huì)注重到對(duì)象的賦值會(huì)產(chǎn)生一些令人震動(dòng)的效果。
  
  1. 方法調(diào)用中的別名處理
  將一個(gè)對(duì)象傳遞到方法內(nèi)部時(shí),也會(huì)產(chǎn)生別名現(xiàn)象。
  
  
  //: PassObject.java
  // Passing objects to methods can be a bit tricky
  
  class Letter {
   char c;
  }
  
  public class PassObject {
   static void f(Letter y) {
    y.c = 'z';
   }
   public static void main(String[] args) {
    Letter x = new Letter();
    x.c = 'a';
    System.out.println("1: x.c: " + x.c);
    f(x);
    System.out.println("2: x.c: " + x.c);
   }
  } ///:~
  
  在許多程序設(shè)計(jì)語(yǔ)言中,f()方法表面上似乎要在方法的作用域內(nèi)制作自己的自變量Letter y的一個(gè)副本。但同樣地,實(shí)際傳遞的是一個(gè)句柄。所以下面這個(gè)程序行:
  y.c = 'z';
  實(shí)際改變的是f()之外的對(duì)象。輸出結(jié)果如下:
  1: x.c: a
  2: x.c: z
  別名和它的對(duì)策是非常復(fù)雜的一個(gè)問(wèn)題。盡管必須等至第12章才可獲得所有答案,但從現(xiàn)在開(kāi)始就應(yīng)加以重視,以便提早發(fā)現(xiàn)它的缺點(diǎn)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 91av亚洲| 91精彩在线 | 91成人天堂久久成人 | 黄色一级毛片免费看 | videos高潮 | 成人免费一区二区三区 | 国产午夜精品一区二区三区在线观看 | 在线a亚洲视频播放在线观看 | 国产毛片在线看 | 男男啪羞羞视频网站 | 日韩1区 | 国产羞羞视频在线观看 | 性欧美极品xxxx欧美一区二区 | 羞羞视频免费网站日本动漫 | 国内免费视频成人精品 | 国产99久久久久久免费看 | 成码无人av片在线观看网站 | 欧洲精品久久 | 黄色网址入口 | 91性高湖久久久久久久久网站 | 久久精品一区二区三区国产主播 | 亚洲精品久久久久久下一站 | 欧美三级欧美成人高清www | 中文字幕在线观看91 | 国产精品久久久久久久久久10秀 | 欧美三级日本三级少妇99 | 日本在线播放一区二区三区 | 亚洲视频网 | 精品一二三区视频 | www.99热视频| 久久久久久久久成人 | 欧美精品一区二区三区在线播放 | 日韩午夜一区二区三区 | 狠狠干91 | 成人免费观看毛片 | 神马久久蜜桃 | 污片视频在线观看 | 国产精品爆操 | 成人午夜免费国产 | 成人三级黄色片 | av播放在线 |