国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

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

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

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

swap不能交換原生數(shù)據(jù)類型以及字符串類型。

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還是原來的值。其實就是值傳遞。不理解的話回去看看值傳遞。

但是這樣用數(shù)組改寫后便可實現(xiàn)交換功能了:

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

總結:

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

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

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

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

java中的參數(shù)傳遞機制:值傳遞

形參是基本數(shù)據(jù)類型的,將實參的值傳遞給形參的基本數(shù)據(jù)類型的變量

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

二者的概念:

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

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

Java數(shù)據(jù)類型在內存中的存儲:

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

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

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

那么如何交換兩個數(shù)值呢?

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

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()方法不能交換的解決就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標簽: Java
相關文章:
主站蜘蛛池模板: 国产高清精品自在久久 | 一区二区三区免费视频网站 | 欧美男女网站 | 97干干干| 三级三级三级全黄 | 一本色道久久综合亚洲精品加 | 欧美一级毛片高清毛片 | 亚洲经典乱码在线播 | 久久国产夜色精品噜噜亚洲a | 2021国产成人精品久久 | 久久亚洲精品中文字幕 | 亚洲一区二区三区高清视频 | 欧美日韩高清性色生活片 | 91成人免费在线视频 | 欧美成人性动漫在线观看 | 国产日韩欧美一区 | 欧美在线观看视频一区 | 91久久国产综合精品女同国语 | 日韩欧美不卡一区二区三区 | 国产精品久久久久久免费 | 亚洲a级片在线观看 | 色老头一区二区三区在线观看 | 国产激情一区二区三区四区 | 国产一区二区在线播放 | 国产亚洲欧美成人久久片 | 成人18免费网站 | 一级a级国产不卡毛片 | a级毛片毛片免费观看永久 a级毛片毛片免费很很综合 | 4438全国最大成人网视频 | 欧美一区二区视频 | 最近最新中文字幕免费的一页 | 成人国产精品视频 | 亚洲精品成人一区二区 | 五月天婷婷伊人 | 国产一区二区三区成人久久片 | 国产一精品一aⅴ一免费 | 日韩特级片 | 在线观看日韩 | 欧美线在线精品观看视频 | 久久伊人男人的天堂网站 | 久色视频 |