两个nil可能不相等吗?
两个nil可能不相等吗?
接口时对非接口之(例如指针,struct等)的封装,内部实现包含两个字段,类型T
和值V
。一个接口为nil,当且仅当T和V都处于unset的状态(T=nil,V is unset)
两个接口比较时,会先比较T,再比较V
接口值和非接口值相比比较时,会将非接口值转为接口值,再比较
1
2
3
4
5
6
7func 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
}
fmt.Println(p==i)
,接口值与非接口值相比较时,会将i转为 (type=* int,v=nil),此时p为(type=*int,v=nil),所以 p==i ,返回true- p的V为nil,p==nil,返回true
- 接口值与非接口值相比较时,会将非接口值转为接口值,再比较,(type=* int,v=nil)!=(type=nil,v=nil),返回false
两个nil可能不相等吗?
http://example.com/2023/11/05/两个nil可能不相等吗?/