面試官:值為 nil 為什么不等于 nil ?
小明同學去面試被問到了這么一個面試題,請看代碼:
請問輸出結果是啥?
可能很多同學,會認為結果是輸出兩個 nil。
為什么呢?
因為 f 和 a 都沒初始化,都是 nil,所以循環遍歷后肯定也是 nil。
如果你的答案也是這樣,那就掉進坑里了。
答案是,啥都不會輸出!
且聽我慢慢給你分析:
一、變量的值和類型
我們先來打印下這兩個值:
我們這樣打印其實是打印的是他的值,是 nil 沒錯的。
但是類型不是 nil。
我們可以這樣打印他類型:
二、if 判 nil 含有對類型的判斷
當我們從 interface ?里面把對象取出來后,使用 if 進行判斷,他不單單的比較的是值,還有類型。
看下這段代碼:
現在看下運行結果:
你會發現之后最后 nil 的判斷是通過的,前面兩個判斷都不通過。
三、怎么判斷值是否為 nil
我們在寫代碼時,最好是盡量避免這種代碼,如果硬要這么寫,那我們可以通過以下兩種常見方式判 nil。
1、斷言
2、反射
你學廢了么?
原文:https://mp.weixin.qq.com/s/qPrfMgPVkl1gSLxR690zgw