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