網站首頁 編程語言 正文
先說結論:
變量賦值屬于淺拷貝(關于深拷貝和淺拷貝的區別可以自己了解下)。故如果是可變類型變量(如a是list類型,a=b)賦值,修改a會牽連到b;如果是不可變類型(如int)的賦值,則修改任意變量不會傳遞。
1. 可變類型賦值
可以看出,對于可變類型賦值,變量始終指向同一塊地址。
2. 不可變類型賦值
對于不可變類型變量的賦值,剛開始是指向同一塊地址,但修改任意變量,則修改的變量指向另外一塊地址,不會影響另外一個變量。
那么問題來了,對于自定義的類型進行變量賦值,屬于哪一種呢?
3. 自定義類型變量賦值
?可以看出,對自定義變量中的屬性進行修改也會傳遞。
但是,如果對整體變量重新賦值呢?
可以看出,如果對整體變量重新賦值,修改不會傳遞,修改的變量會指向新的地址。
對于自定義變量賦值的區別,不留意很容易踩坑,如下面函數,將列表轉化為鏈表:
創建head
結點的副本cur,對其進行賦值,賦值后再讓它指向下一個節點,最終返回頭結點,但結果出人意料。仔細分析發現,在for循環中重新對cur賦值,cur = Node(i)
,使得cur不再指向head節點,而是指向另一塊內存地址,此時head
和cur
分路揚鑣,再也沒有關系了。
正確的做法是:
在for循環內,不對cur本身進行更改,只對其屬性next進行更改,這樣cur和head始終指向同一塊地址,最終return head.next
(因為第一個node沒數據,真正的node從head.next開始)?
原文鏈接:https://blog.csdn.net/qq_34062683/article/details/123029850
相關推薦
- 2022-05-12 小程序滾動穿透解決方案
- 2022-12-14 Rocksdb?Memtable數據結構源碼解析_Android
- 2022-08-14 Shell腳本實現監測文件變化的示例詳解_linux shell
- 2022-07-09 python?查看cpu的核數實現_python
- 2022-07-07 Golang實現AES加密和解密的示例代碼_Golang
- 2022-05-12 databinding 與 RecyclerView.Adapter
- 2022-08-04 python實現凱撒密碼加密解密的示例代碼_python
- 2022-11-30 C#?WinForm自動更新程序之文件上傳操作詳解_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支