国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

java和swift數(shù)據(jù)傳遞的區(qū)別

2023-08-25 17:12 作者:便宜酒  | 我要投稿

值傳遞:是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)復(fù)制一份傳遞到函數(shù)中,這樣在函數(shù)中如果對(duì)參數(shù)進(jìn)行修改,將不會(huì)影響到實(shí)際參數(shù)。

引用傳遞:是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)的地址傳遞到函數(shù)中,那么在函數(shù)中對(duì)參數(shù)所進(jìn)行的修改,將影響到實(shí)際參數(shù)。

Java除了基本數(shù)據(jù)類型是值傳遞,都是引用傳遞。不難發(fā)現(xiàn),new出來的對(duì)象都是引用傳遞(注意String也是可以new出來的),而且這些對(duì)象相比基本數(shù)據(jù)類型更大更復(fù)雜。new出來的對(duì)象是放在堆里的,堆的分配和清理花的時(shí)間多一些,對(duì)于基本類型數(shù)據(jù)這種又小又簡單的數(shù)據(jù),不必采用new,而是直接存儲(chǔ)“值”在棧中,它的存取速度僅次于寄存器。

在Swift眾多數(shù)據(jù)類型中,只有class是指針傳遞,其余的如Int,Float,Bool,Character,Array,Set,enum,struct全都是值傳遞。

一個(gè)例子是,在java用forEach循環(huán)一個(gè)集合時(shí),不可改變遍歷對(duì)象的值,否則循環(huán)次數(shù)會(huì)出問題,而在swift用for-in循環(huán)遍歷一個(gè)數(shù)組時(shí),可以改變遍歷對(duì)象的值。

因?yàn)樵趈ava里,循環(huán)開始時(shí),一個(gè)棧空間分配給這個(gè)循環(huán),集合也從堆被引用到其中,對(duì)集合的修改也在這個(gè)棧中。

在swift里,循環(huán)開始時(shí),數(shù)組的值復(fù)制一份,循環(huán)次數(shù)立即確定,一個(gè)棧空間分配給這個(gè)循環(huán),循環(huán)內(nèi)的操作如對(duì)數(shù)組的修改也不在這個(gè)棧中,而是又復(fù)制一份,在另一個(gè)棧中完成這部分操作。

一個(gè)例子可以見我的一道leetcode題《比較隊(duì)列存放森林》,用同樣的方法分別用java和swift解答。

https://leetcode.cn/profile/articles/


java和swift數(shù)據(jù)傳遞的區(qū)別的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
瑞金市| 新野县| 天全县| 册亨县| 夏津县| 剑阁县| 剑川县| 纳雍县| 舟山市| 莱西市| 广宁县| 荥经县| 桦南县| 永和县| 桂林市| 宣恩县| 南雄市| 梅州市| 从化市| 伊川县| 北票市| 唐海县| 湟源县| 关岭| 南木林县| 灵川县| 内丘县| 富平县| 焦作市| 苏州市| 喀喇| 永德县| 临沂市| 睢宁县| 湖南省| 大荔县| 长宁区| 开远市| 连江县| 贺兰县| 凌源市|