一个关于slice的问题

var arr []int
brr := make([]int, 0)

// 这个两个输出时一样的
fmt.Println(arr)
fmt.Println(brr)

fmt.Println(arr == nil) // 输出true
fmt.Println(brr == nil) // 输出false

为什么会是这样的结果?一个ture,一个false

阅读 3.7k
2 个回答

实际上...你被println骗了...哈哈

试试

fmt.Printf("%#v\n", arr)
fmt.Printf("%#v\n", brr)

你会发现真相的...

如果是想要简单的可以通过
println(arr) println(brr)
你可以看到两个值,第一个是类型对应的地址,第二个是值实际的地址,你应该可以看到arr和brr打印出来第一个参数是非0的(都是[]int),然后第二个参数,arr是0x0, brr则不是。
而这时候brr == nilarr == nil实际上是让arr和brr去和[]int(nil)做比对,很明显,[]int(nil)arr的值是一样的.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题