久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

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

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
相關文章:
主站蜘蛛池模板: 国产麻豆乱码精品一区二区三区 | 欧美极品一区二区 | 国产欧美精品一区二区 | 精品1区| 99草草 | 97国产一区二区精品久久呦 | 欧美日韩亚洲三区 | 欧美1区2区3区| 亚洲成人在线视频播放 | 九色一区| 免费看的黄网站 | 天天干天天添 | 国产精品大片在线观看 | 做a视频免费观看 | 免费一区在线 | 在线国v免费看 | 奇米在线777| 欧美jizzhd精品欧美巨大免费 | 美女福利网站 | 欧美激情a∨在线视频播放 成人免费共享视频 | 男人的天堂在线视频 | 国产91在线免费观看 | 日韩手机专区 | 国产乱肥老妇国产一区二 | 黄色资源网站 | 欧美在线 | 亚洲 | 日韩一区二区视频在线 | 欧美一级一区 | 激情福利视频 | 天天艹夜夜艹 | 久久91av | 99久久日韩精品视频免费在线观看 | 亚洲精选免费视频 | 国产日韩视频 | av综合站| 欧美大片免费高清观看 | 国产一区二区三区久久久 | 婷婷精品视频 | 久久国产亚洲 | 日韩成人免费视频 | 久久激情视频 |