亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Java值傳遞之swap()方法不能交換的解決

瀏覽:4日期:2022-08-23 15:00:42

自己寫了一個Swap測試類,代碼如下:

swap不能交換原生數據類型以及字符串類型。

public class Swap5{ public static void main(String[] args) { // String x = 'x111'; // String y = 'y111'; String x = new String('x111'); String y = new String('y111'); swap(x, y); System.out.println(x); System.out.println(y); } public static void swap(String a, String b) { String temp = a; a = b; b = temp; }}

運行結果:java Swap5

x111

y111

疑惑:注釋部分不能交換可以理解為x和y生成在字符串池中,但是String x = new String(“x111”);應該是生成在堆中,是引用對象,但為什么交換不了?

public class Swap{ public static void main(String[] args) { int c = 3; int d = 5; swap(c, d); System.out.println('c: ' + c + ' d: ' + d); } public static void swap(int a, int b) { int temp = a; a = b; b = temp; }}

運行結果:

java Swap

c: 3 d: 5

為什么調用swap()方法后并沒有交換c、d的值呢,因為java只有值傳遞(沒有引用傳遞),所以其實調用swap()時是把值賦給a、b,賦完后與c、d就沒什么關系,c、d還是原來的值。其實就是值傳遞。不理解的話回去看看值傳遞。

但是這樣用數組改寫后便可實現交換功能了:

public class Swap5{ public static void main(String[] args) { int[] i = {3, 5}; swap(i); System.out.println(i[0]); System.out.println(i[1]); } public static void swap(int[] a) { int temp = a[0]; a[0] = a[1]; a[1] = temp; }}

運行結果:

5

3

總結:

引用類型才可以交換。因為原生數據類型是直接賦值,而引用類型直接賦的是地址,地址指向的是同一個對象,所以能改變。

補充知識:Java參數值傳遞 swap(a,b)--如何交換a、b的值

首先明白Java的數據類型分為兩種:基本數據類型 和 引用數據類型

Java值傳遞之swap()方法不能交換的解決

java中的參數傳遞機制:值傳遞

形參是基本數據類型的,將實參的值傳遞給形參的基本數據類型的變量

形參是引用數據類型的,將實參的引用類型變量的值(對象的首地址)傳遞給形參

二者的概念:

1)基本類型:簡單數據類型是不能簡化的、內置的數據類型、由編程語言本身定義,它表示了真實的數字、字符和整數。

2)引用數據類型:Java語言本身不支持C++中的結構(struct)或聯合(union)數據類型,它的復合數據類型一般都是通過類或接口進行構造,類提供了捆綁數據和方法的方式,同時可以針對程序外部進行信息隱藏。

Java數據類型在內存中的存儲:

1)基本數據類型的存儲原理:所有的簡單數據類型不存在“引用”的概念,基本數據類型都是直接存儲在內存中的內存棧上的,數據本身的值就是存儲在棧空間里面,而Java語言里面八種數據類型是這種存儲模型;

2)引用類型的存儲原理:引用類型繼承于Object類(也是引用類型)都是按照Java里面存儲對象的內存模型來進行數據存儲的,使用Java內存堆和內存棧來進行這種類型的數據存儲,簡單地講,“引用”是存儲在有序的內存棧上的,而對象本身的值存儲在內存堆上的;

區別:基本數據類型和引用類型的區別主要在于基本數據類型是分配在棧上的,而引用類型是分配在堆上的(需要java中的棧、堆概念),

那么如何交換兩個數值呢?

那么可以傳遞引用類型的數據,如對象或者數組,下面是傳遞的數組:

public class Swap5{ public static void main(String[] args) { int[] i = {3, 5}; swap(i); System.out.println(i[0]); System.out.println(i[1]); } public static void swap(int[] a) { int temp = a[0]; a[0] = a[1]; a[1] = temp; }}

以上這篇Java值傳遞之swap()方法不能交換的解決就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 高清对白精彩国产国语 | 色婷婷视频在线观看 | a在线免费观看视频 | 精彩视频一区二区 | 久久亚洲私人国产精品va | 在线婷婷 | 永久免费看毛片 | 国产日韩欧美亚洲精品95 | 黄色网址在线免费 | 男女无遮挡边做边吃视频免费 | 日本欧美片 | 国模大胆偷拍在线视频 | 亚洲综合色婷婷中文字幕 | 久草在线看片 | 日韩亚洲欧美一区二区三区 | 97久久久久国产精品嫩草影院 | 国产成人午夜片在线观看 | 国产色视频一区二区三区 | 免费播放欧美毛片欧美a | 亚洲欧美日韩国产一区二区精品 | 韩国免费毛片在线看 | 免费一级特黄a | 福利在线看片 | 日本护士xxxxx极品 | 国产成人午夜福在线观看 | 大尺度人体自拍私拍337p | 女人被狂躁的视频免费动图 | 国产成人高清亚洲一区久久 | 久九九久福利精品视频视频 | 日韩成人综合网 | 99久久国产综合精品麻豆 | 白丝啪啪| 99久久一香蕉国产线看观看 | 黄色a一级视频 | 2019国内精品久久久久久 | 亚洲精品国产第一区二区小说 | 爽妇综合网 | 123456成年免费视频 | 青青国产成人精品视频 | 五月天爱爱激情视频在线观看 | 日本成人一区二区三区 |