av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

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

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

瀏覽:3日期: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
相關文章:
主站蜘蛛池模板: 欧美一级片免费看 | 国内久久 | 亚洲国产二区 | 国产精品免费福利 | 日韩高清一区 | caoporn地址 | 精品一区在线看 | 国产精品欧美一区二区三区不卡 | 久久久久久久97 | 在线中文字幕亚洲 | 高清av电影 | 国产成人啪免费观看软件 | 国产成人在线免费 | 亚洲国产精品视频 | 91精品国产91久久久久久最新 | 欧美成人一级视频 | 人人干在线| 亚洲一区二区在线视频 | 成人小视频在线 | 国产精品国产三级国产aⅴ无密码 | 91 中文字幕 | 国产成人精品一区二区三区 | 色精品 | 欧美一区二区三区 | 欧美精品成人影院 | 一级毛片免费 | 国产精品美女久久久久aⅴ国产馆 | 手机在线观看av | 国产一区二区三区在线免费观看 | www.色综合 | 久久精品国产99国产精品 | 欧美区日韩区 | 亚洲欧美激情精品一区二区 | www操操 | 奇米久久 | 羞羞的视频免费观看 | 91av在线免费 | 欧美视频二区 | 欧美一区二区三区免费电影 | 成人亚洲| 中文字幕欧美一区 |