基于傳遞list類(lèi)型的參數(shù)的問(wèn)題
傳遞list類(lèi)型的參數(shù)問(wèn)題
java中除了基礎(chǔ)的數(shù)據(jù)類(lèi)型是值傳遞外,其它類(lèi)型都是對(duì)象,也就是引用類(lèi)型(地址傳遞),這個(gè)就不多說(shuō)了
今天遇到一個(gè)問(wèn)題,就是在多次添加同一個(gè)list對(duì)象到另一個(gè)list里的時(shí)候,為什么會(huì)添加多少次list對(duì)象,外面這層list的大小就有多少呢,都是相同的地址?。?!
這段代碼
先把一個(gè)list作為參數(shù)傳遞到另一個(gè)list類(lèi)型的add函數(shù)中
public class Main{ public static void main(String[] args) { List<List<Integer>> lists = new ArrayList<>(); List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); lists.add(list); print(lists); list.clear(); list.add(3); lists.add(list); print(lists); } public static void print(List<List<Integer>> lists){ System.out.println("開(kāi)始打印"); for(List<Integer> list : lists){ for(Integer num : list){ System.out.println(num); } } } }
輸出結(jié)果
這段代碼可以看出,第一次打印時(shí) list里的值是1和2(對(duì)應(yīng)的lists里的值也只有1和2,因?yàn)閘ists里有一個(gè)list);
第一次打印完后,把list清空后添加3,這個(gè)時(shí)候list里值只有3,但是這個(gè)時(shí)候可以看到第二次的打印 lists的值有兩個(gè)3(因?yàn)槔锩嬗袃蓚€(gè)list),
而且這兩個(gè)list存值的地方是同一個(gè)地址,在調(diào)用list.clear()的時(shí)候,list所在的地址里的值就變成空的了,并沒(méi)有出現(xiàn)其中一個(gè)list的值是1,2;另一個(gè)list的值是3。
這端代碼調(diào)用了兩次lists.add(),所以lists里面存儲(chǔ)了兩個(gè)List類(lèi)型的值,而恰好這兩個(gè)List都是list,它們的值都是由同一個(gè)地址存儲(chǔ)的。
感覺(jué)這里我的解釋有點(diǎn)描述不清楚。。。。。。
因?yàn)?strong>我想描述的不是list是怎么傳遞的,而是為什么第二次打印會(huì)出現(xiàn)兩次3
對(duì)于引用傳遞的例子,添加兩行代碼就會(huì)看得很清晰:
print
函數(shù)內(nèi)的末尾添加一句參數(shù)lists.clear()main
函數(shù)的最后在添加一句print()函數(shù)
public class Main{ public static void main(String[] args) { List<List<Integer>> lists = new ArrayList<>(); List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); lists.add(list); print(lists); list.clear(); list.add(3); lists.add(list); print(lists); print(lists);//這是新加的一行 } public static void print(List<List<Integer>> lists){ System.out.println("開(kāi)始打印"); for(List<Integer> list : lists){ for(Integer num : list){ System.out.println(num); } } lists.clear();//這是新加的一行 } }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用spring-boot-maven-plugin插件打包SpringBoot應(yīng)用方式
spring-boot-maven-plugin插件可以將SpringBoot應(yīng)用打成帶依賴的jar包,該包中不僅包含應(yīng)用自身的代碼,還包含了pom.xml中配置的依賴,修改pom.xml打包后,生成的jar包就包含了項(xiàng)目依賴,生成的jar包位于項(xiàng)目的target文件夾下2025-02-02詳解基于Spring Cloud幾行配置完成單點(diǎn)登錄開(kāi)發(fā)
這篇文章主要介紹了詳解基于Spring Cloud幾行配置完成單點(diǎn)登錄開(kāi)發(fā),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02SpringBoot實(shí)現(xiàn)攔截器、過(guò)濾器、監(jiān)聽(tīng)器過(guò)程解析
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)攔截器、過(guò)濾器、監(jiān)聽(tīng)器過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12詳解SpringBoot+Dubbo集成ELK實(shí)戰(zhàn)
這篇文章主要介紹了詳解SpringBoot+Dubbo集成ELK實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10nacos中的配置使用@Value注解獲取不到值的原因及解決方案
這篇文章主要介紹了nacos中的配置使用@Value注解獲取不到值的原因分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03Spring Boot環(huán)境屬性占位符解析及類(lèi)型轉(zhuǎn)換詳解
這篇文章主要給大家介紹了關(guān)于Spring Boot環(huán)境屬性占位符解析及類(lèi)型轉(zhuǎn)換的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08SpringBoot整合atomikos實(shí)現(xiàn)跨庫(kù)事務(wù)的詳細(xì)方案
這篇文章主要介紹了SpringBoot整合atomikos實(shí)現(xiàn)跨庫(kù)事務(wù),業(yè)務(wù)主要涉及政府及企業(yè)且并發(fā)量不大,所以采用XA事務(wù),雖然性能有所損失,但是可以保證數(shù)據(jù)的強(qiáng)一致性,需要的朋友可以參考下2022-06-06Java數(shù)組的遍歷與求和知識(shí)點(diǎn)
本篇文章給大家總計(jì)了Java數(shù)組的遍歷與求和的知識(shí)點(diǎn)以及需要注意的地方,需要的朋友參考學(xué)習(xí)下。2018-02-02