一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java 交換兩個變量的數值實現方法

Java 交換兩個變量的數值實現方法

2020-05-28 13:30jingxian JAVA教程

下面小編就為大家帶來一篇Java 交換兩個變量的數值實現方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、參數傳遞方法

為解決標題問題,首先介紹參數傳遞方法。目前各類程序設計語言的參數傳遞方法主要有三種:

1.按值傳遞
2.按引用傳遞
3.按指針傳遞

其中按值傳遞表示方法(函數)接收的是調用者提供的變量的拷貝,不改變參數的值;按引用傳遞表示方法(函數)接收的調用者提供的變量地址;按指針傳遞表示方法(函數)接收的是調用者提供的指針的拷貝,不改變指針的值和地址,但可以改變指針所指向的地址。

二、Java參數傳遞方法

Java提供的參數傳遞方法,很遺憾只有一種,按值傳遞。也就是說,方法得到的是所有參數值的一個拷貝,方法不能修改傳遞給它的參數變量的內容。

Java的方法參數類型可以分為兩類:

1.基本數據類型
2.對象引用

有過Java開發經驗的朋友都知道,對于基本數據類型,Java方法無法改變變量內容。那對自定義類的對象引用是否也不能修改內容呢?可以通過一個簡單的例子說明。代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
pubpc class MyClass{
  private Object num;
 
  pubpc MyClass(Object num){
    this.num=num;
  }
  
  pubpc Object getNum() {
    return num;
  }
 
  pubpc void setNum(Object num) {
    this.num = num;
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
pubpc class Main {
  
  pubpc static void change(MyClass myClass){
    myClass.setNum(100);
  }
  
  
  
  pubpc static void main(String[] args){
    MyClass a=new MyClass(10);
    System.out.println("調用change方法前的值為:"+a.getNum());
    change(a);
    System.out.println("調用change方法后的值為:"+a.getNum());
  }
  
}

上面代碼執行輸出結果如下:

Java 交換兩個變量的數值實現方法

從結果中可以看出,change方法能夠修改對象的狀態。也就是說Java方法可以改變對象的參數狀態。那這是否意味著Java方法對于自定義的數據類型(自定義類)的參數采用的是引用傳遞?為了確認結果可以編寫個簡單例子,所有的自定義類仍然是上面的MyClass。代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
pubpc static void swap(MyClass a,MyClass b){
    MyClass tmp=a;
    a=b;
    b=tmp;
  }
  
  pubpc static void main(String[] args){
    MyClass a=new MyClass(10);
    MyClass b=new MyClass(100);
    System.out.println("交換之前a的值為:"+a.getNum());
    System.out.println("交換之前b的值為:"+b.getNum());
    swap(a,b);
    System.out.println("交換之后a的值為:"+a.getNum());
    System.out.println("交換之后b的值為:"+b.getNum());
  }
}

執行結果如下:

Java 交換兩個變量的數值實現方法

通過上面結果可以發現,Java方法對自定義類的參數傳遞使用的仍然是值傳遞,不是引用傳遞。那為什么Java方法能夠修改對象狀態呢?

可以考慮調用change方法的具體執行過程,從中尋找答案。

調用change方法事,具體的執行過程是:

myClass被初始化成實參a的copy,這是對對象的引用。

setNum方法應用于這個對象的引用。myClass和a同時引用的那個MyClass對象的num變為了100。

方法結束后,參數變量myClass不再使用。而a繼續引用那個num變為100的MyClass對象。如下圖所示。

Java 交換兩個變量的數值實現方法

所以,Java方法能夠實現改變對象參數狀態的原因是:方法得到的是對象引用的拷貝,對象引用及方法中的其他拷貝同時引用同一個對象。

現在,總結一下Java的方法參數使用:

方法不能修改一個基本數據類型的參數;

方法可以改變對象參數的狀態;

方法不能讓對象參數引用一個新的對象(原因參考調用change方法時的具體執行過程)。

三、交換變量的數值

既然已經知其所以然,那么知其然就不是難事了。直接貼出我的個人代碼:

?
1
2
3
4
5
pubpc static void swap(MyClass a,MyClass b){
    Object tmp=a.getNum();
    a.setNum(b.getNum());
    b.setNum(tmp);
}

執行結果如下:

Java 交換兩個變量的數值實現方法

交換有效。

參考文獻:Java核心技術 卷Ⅰ。

以上這篇Java 交換兩個變量的數值實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费高清视频在线观看 | 香港日本三级亚洲三级 | 久久久久嫩草影院精品 | 国产精品久久久久久久久免费 | 午夜DY888国产精品影院 | 国产馆在线观看免费的 | 色婷婷在线播放 | 扒开斗罗美女了的胸罩和内裤漫画 | 乳女教师欲乱动漫无修版动画3d | 四虎国产精品免费入口 | 秋霞午夜伦午夜高清福利片 | 含羞草传媒一天免费看下 | 国四虎影永久 | 好大好爽好涨太深了小喜 | 91噜噜噜在线观看 | 精品国产品香蕉在线观看75 | 暖暖免费观看高清在线 | 好大好猛好爽好深视频免费 | 日本孕妇大胆孕交 | 四虎麻豆 | 日本美女动态图片 | 97精品国产自在现线免费观看 | 午夜福利理论片在线播放 | 日本ccc三级 | 亚洲国产成人99精品激情在线 | 精品一区heyzo在线播放 | 国产一区二区免费福利片 | 国产成人永久免费视 | 成人在线播放 | 午夜影院h| 97操| 欧美精品久久久久久久影视 | 美女扒开屁股让男人进去 | 3x3x3x短视频在线看 | 艾秋麻豆果冻传媒老狼仙踪林 | 精品久久香蕉国产线看观看亚洲 | 日韩在线观看一区二区不卡视频 | 黑帮大佬与我的365天2标清中文 | 国产成人综合精品一区 | 国产伦精品一区二区三区免 | 九九精品免费视频 |