Kotlin交換值的理解(swap)

學(xué)習(xí)kotlin的時(shí)候默穴,我們看到這樣一個(gè)交換兩個(gè)int值的語法

    var a = 1
    var b = 2
    a = b.apply{
        b = a
    }
   //或者a=b.also{b=a},總之所有返回this的擴(kuò)展都行
    println("a=$a, b=$b");

運(yùn)行代碼發(fā)現(xiàn)鼓择, a脯爪, b確實(shí)互換了则北,現(xiàn)在a=2, b=1,記住這個(gè)語法簡單,但關(guān)鍵是要理解它為什么能達(dá)到互換值的目的痕慢。尤其是像我這種C++思想已經(jīng)根深蒂固的人尚揣,一開始可能會(huì)很迷惑,會(huì)產(chǎn)生這樣的疑問掖举, 明明在apply內(nèi)部b已經(jīng)變成1了快骗,你再返回this 不也是1嗎,因?yàn)閠his指向的就是b啊。 那最終a不也成1了方篮?
如果你和我一樣名秀,c++思想根深蒂固,學(xué)習(xí)kotlin的時(shí)候 認(rèn)為很簡單的地方 又是一目十行的話藕溅,就會(huì)產(chǎn)生如此疑問匕得。
那么我們回頭去看看,就會(huì)發(fā)現(xiàn)巾表,在kotlin中一切都是對象汁掠,并沒有c++或者java中所謂的基本類型。 那現(xiàn)在我們理解了a集币,b都是對象就好理解一些了考阱, apply的作用是執(zhí)行{}內(nèi)的代碼塊,并返回this惠猿。 那么b=a相當(dāng)于讓b這個(gè)對象變量指向了原來a對象。 但原始的b對象本身還在负间,也就是我們將要返回的那個(gè)this還是原始的b偶妖, 然后是a=this(原始的b),這就達(dá)到了a政溃,b對象指向互換趾访。我把它翻譯成c++代碼,可能更好理解董虱,原理是一樣的扼鞋。 假設(shè)我們在c++中也有一個(gè)用于表示整數(shù)類型的類叫 MyInt那么 我們也實(shí)現(xiàn)一個(gè)類函數(shù)叫apply,模擬上面的邏輯愤诱,我們得到如下代碼

typedef void(PFN_Block)();
class MyInt
{
public:
    MyInt( int val)
    {
        _value = val;
    }
    MyInt* Apply(PFN_Block fn)
    {
        fn();
        return this;
    }
    
    int _value;
};  
MyInt* a = new MyInt(1);
MyInt* b = new MyInt(2);
void DoIt()
{
    b = a;
}
a = b->Apply(DoIt);

這樣依然達(dá)到了a,b兩個(gè)指針互換的目的(a云头,b指向的內(nèi)存地址互換)。
您現(xiàn)在應(yīng)該理解了淫半。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末溃槐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子科吭,更是在濱河造成了極大的恐慌昏滴,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件对人,死亡現(xiàn)場離奇詭異谣殊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)牺弄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門姻几,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事鲜棠〖〕” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵豁陆,是天一觀的道長柑爸。 經(jīng)常有香客問我,道長盒音,這世上最難降的妖魔是什么表鳍? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮祥诽,結(jié)果婚禮上譬圣,老公的妹妹穿的比我還像新娘。我一直安慰自己雄坪,他們只是感情好厘熟,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著维哈,像睡著了一般绳姨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阔挠,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天飘庄,我揣著相機(jī)與錄音,去河邊找鬼购撼。 笑死跪削,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迂求。 我是一名探鬼主播碾盐,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼揩局!你這毒婦竟也來了廓旬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤谐腰,失蹤者是張志新(化名)和其女友劉穎孕豹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體十气,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡励背,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了砸西。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叶眉。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡址儒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出衅疙,到底是詐尸還是另有隱情莲趣,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布饱溢,位于F島的核電站喧伞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏绩郎。R本人自食惡果不足惜潘鲫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肋杖。 院中可真熱鬧溉仑,春花似錦、人聲如沸状植。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽津畸。三九已至振定,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洼畅,已是汗流浹背吩案。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工棚赔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帝簇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓靠益,卻偏偏與公主長得像丧肴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子胧后,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345