国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

談?wù)劯鞣NJAVA中的調(diào)用程序方式

2019-11-18 13:09:40
字體:
供稿:網(wǎng)友

  很多書籍都說java支持傳引用調(diào)用的方式,類似于C++中的Person &a引用調(diào)用,而近來編程碰到一系列問題讓我對此產(chǎn)生了懷疑,于是將這些方法一一列出,我們來一起看看JAVA中的調(diào)用方式:
  
   看下面的程序:
  
   class Person {
  
     PRivate String name;//姓名
  
    private String sex;//性別
  
    public Person(String x, String y) {
      this.name = x;
      this.sex = y;
    }
  
    public void setStatus(String x, String y) {
      this.name = x;
      this.sex = y;
  
    }
  
    public String toString() {
  
      return name + sex;
  
    }
  
    // -----交換普通對象-----
    public static void changeref(Person tmpx, Person tmpy) {
      //交換tmpx和tmpy對象
      Person swapref = tmpx;
      tmpx = tmpy;
      tmpy = swapref;
  //    System.out.println("在方法中交換的結(jié)果: refa =" + tmpx.toString());
  //    System.out.println("在方法中交換的結(jié)果: refb =" + tmpy.toString());
    }
  
    // ----- 交換數(shù)組對象-----
    public static void changeArrayRef(Person[] x, Person[] y) {
  
      //交換數(shù)組對象
      Person swaparrayref = x[x.length-1];
      x[x.length-1] =y[x.length-1];
      y[x.length-1] = swaparrayref;
  
    }
  
  
    //-----交換數(shù)組-----
    public static void changeArray(int[] x,int[] y) {
  
      int[] tmp =x;
      x = y;
      y = tmp;
  
  
    }
  
  
  }
  
  
  
  public class Demo {
  
    public static void main(String[] args) {
  
      //-------建立并構(gòu)造兩個對象---------
      Person refa = new Person("張三", "男");
      Person refb = new Person("李四", "男");
  
      //交換refa對象和refb對象
      Person.changeref(refa, refb);
      //從交換結(jié)果中看出,實際對象并未交換
      System.out.println("在主函數(shù)中交換的結(jié)果 refa = " + refa.toString());
      System.out.println("在主函數(shù)中交換的結(jié)果 refb = " + refb.toString());
  
      //-------建立兩個對象數(shù)組----------
      Person[] arraya = new Person[1];
      Person[] arrayb = new Person[1];
  
      //分別構(gòu)造數(shù)組對象
      arraya[0] = new Person("王五","男");
      arrayb[0] = new Person("趙六","男");
  
      /*數(shù)組對象為null時,不能設(shè)置其值,必須先構(gòu)造它(即調(diào)用構(gòu)造函數(shù)),再用其它方法設(shè)置其值
     */
  
      System.out.println('/n'+"數(shù)組對象交換前的結(jié)果 arraya = " + arraya[0].toString());
      System.out.println("數(shù)組對象交換前的結(jié)果 arrayb = " + arrayb[0].toString());
      //交換這兩個數(shù)組對象
      Person.changeArrayRef(arraya, arrayb);
      System.out.println("-交換后的結(jié)果 arraya = " + arraya[0].toString());
      System.out.println("-交換后的結(jié)果 arrayb = " + arrayb[0].toString());
  
      //-------建立兩個普通數(shù)組---------
      int[] a = new int[2];
      int[] b = new int[2];
  
      //給數(shù)組個元素賦值
      for(int i =0;i        a[i] = i;
        b[i] = i+1;
      }
  
      System.out.println('/n'+"數(shù)組交換前 inta[0] = " + a[0]);
      System.out.println("數(shù)組交換前 intb[0] = " + b[0]);
  
      //交換數(shù)組
      Person.changeArray(a,b);
  
      System.out.println("-交換后的結(jié)果 inta[0] = " + a[0]);
      System.out.println("-交換后的結(jié)果 intb[0] = " + b[0]);
  
  
    }
  }
  
  
   從程序執(zhí)行的結(jié)果來看:在交換兩個對象時,僅僅改變了對象句柄的指向,而沒有改變對象內(nèi)容,因此方法參數(shù)為對象時,并不交換實際內(nèi)容,而是交換了拷貝內(nèi)容。
  
   數(shù)組對象有點希奇,在形參中交換了,實參也反應(yīng)出來。
  
   數(shù)組和普通數(shù)據(jù)類型一樣,形參的改變,不會反應(yīng)到實參中來。
  
   對象也一樣,形參改變了,實參一樣不會反應(yīng)出來。
  
   小結(jié)一下:
   1、方法可以修改對象參數(shù)的狀態(tài)
   2、方法不能讓對象參數(shù)指向新的對象
   3、方法不能修改基本類型(int、byte等)的參數(shù)
  
   因此要想交換對象,在方法體中是不現(xiàn)實的,用Clone才能完成……未完,待續(xù)…………

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 泗洪县| 沁阳市| 中牟县| 云梦县| 家居| 宝兴县| 关岭| 芜湖县| 游戏| 芜湖县| 太保市| 涟水县| 常熟市| 天柱县| 泰州市| 修武县| 广水市| 察哈| 牡丹江市| 巨鹿县| 雅江县| 钟山县| 南岸区| 林西县| 抚州市| 巴中市| 哈巴河县| 汕头市| 西峡县| 新安县| 贡山| 清远市| 阳江市| 五原县| 瑞安市| 涿鹿县| 泰兴市| 雅江县| 漳州市| 和硕县| 邹平县|