两个nil可能不相等吗?

两个nil可能不相等吗?

接口时对非接口之(例如指针,struct等)的封装,内部实现包含两个字段,类型T和值V 。一个接口为nil,当且仅当T和V都处于unset的状态(T=nil,V is unset)

  • 两个接口比较时,会先比较T,再比较V

  • 接口值和非接口值相比比较时,会将非接口值转为接口值,再比较

    1
    2
    3
    4
    5
    6
    7
    func main(){
    var p *int =nil
    var i interface{} =p//会将i转为 (type=*int,v=nil)
    fmt.Println(p==i)//true
    fmt.Println(p==nil)//true
    fmt.Println(i==nil)//false
    }
  1. fmt.Println(p==i) ,接口值与非接口值相比较时,会将i转为 (type=* int,v=nil),此时p为(type=*int,v=nil),所以 p==i ,返回true
  2. p的V为nil,p==nil,返回true
  3. 接口值与非接口值相比较时,会将非接口值转为接口值,再比较,(type=* int,v=nil)!=(type=nil,v=nil),返回false

两个nil可能不相等吗?
http://example.com/2023/11/05/两个nil可能不相等吗?/
作者
Forrest
发布于
2023年11月5日
许可协议