您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Java值傳遞之swap()方法不能交換怎么解決,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
自己寫了一個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中的參數傳遞機制:值傳遞
形參是基本數據類型的,將實參的值傳遞給形參的基本數據類型的變量
形參是引用數據類型的,將實參的引用類型變量的值(對象的首地址)傳遞給形參
二者的概念:
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()方法不能交換怎么解決就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。