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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

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

自己寫(xiě)了一個(gè)Swap測(cè)試類(lèi),代碼如下:

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

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; }}

運(yùn)行結(jié)果:java Swap5

x111

y111

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

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; }}

運(yùn)行結(jié)果:

java Swap

c: 3 d: 5

為什么調(diào)用swap()方法后并沒(méi)有交換c、d的值呢,因?yàn)閖ava只有值傳遞(沒(méi)有引用傳遞),所以其實(shí)調(diào)用swap()時(shí)是把值賦給a、b,賦完后與c、d就沒(méi)什么關(guān)系,c、d還是原來(lái)的值。其實(shí)就是值傳遞。不理解的話(huà)回去看看值傳遞。

但是這樣用數(shù)組改寫(xiě)后便可實(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; }}

運(yùn)行結(jié)果:

5

3

總結(jié):

引用類(lèi)型才可以交換。因?yàn)樵鷶?shù)據(jù)類(lèi)型是直接賦值,而引用類(lèi)型直接賦的是地址,地址指向的是同一個(gè)對(duì)象,所以能改變。

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

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

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

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

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

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

二者的概念:

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

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

Java數(shù)據(jù)類(lèi)型在內(nèi)存中的存儲(chǔ):

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

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

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

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

那么可以傳遞引用類(lèi)型的數(shù)據(jù),如對(duì)象或者數(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()方法不能交換的解決就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 香港aa三级久久三级老师 | 亚洲国产精品久久精品成人 | 黄 色 成 年 人小说 | 永久免费精品视频 | 一级做性色a爰片久久毛片免费 | 在线精品欧美日韩 | 自拍视频精品 | 日本免费人成黄页网观看视频 | 国内自拍第1页 | 国产亚洲一欧美一区二区三区 | 欧美日韩亚洲国产 | www.99在线| 男人毛片 | 韩国一大片a毛片 | 欧美激情欧美狂野欧美精品免费 | 免费在线黄色网址 | 久久成人免费大片 | 免费人成激情视频在线观看冫 | 成人免费公开视频 | 亚洲国产精品一区二区久久 | 国产黄色一级网站 | 国产网站精品 | 欧美色大成网站www永久男同 | 国产精品一在线观看 | 香焦视频在线观看黄 | 亚洲欧美日韩一级特黄在线 | 欧美理论在线 | 国产中文字幕视频 | 成人久久久观看免费毛片 | 看v片| 在线视频亚洲欧美 | 国产精品看片 | 韩国免费一级成人毛片 | 日韩国产片 | 日韩专区亚洲精品欧美专区 | 亚洲欧美一区二区三区久本道 | 国产精品一区久久 | 精品国产一区二区三区免费看 | 国产一区二区三区在线视频 | 黄色片三级网站 | 亚洲精品区一区二区三区四 |