array和slice

数组长度不可变

切片是围绕动态数组的概念构建的,可以按需自动增长和缩小。(注意:切片传递的是指针的拷贝值,所以可以在函数里面修改指针指向的值,对外有影响)

切片的底层内存也是在连续块中分配的,所以切片还能获得索引,迭代以及为垃圾回收优化的好处

slice的结构体包含三个参数,指针,长度,容量
所以传递一个切片切片需要24字节的内存:指针字段需要8字节,长度和容量字段分别需要8字节


类型 长度 引用 扩容
array 固定长度 参数传递时直接copy一份 不支持 不会影响其他的数据 消耗内存
slice 长度不固定 在原有的array上修改,相关的都会受到影响 容量小于1024则*2,大于1024 *1.25 节省内存 容易操作失误,出现莫名的问题

空切片和 nil 切片的区别在于,

空切片指向的地址不是nil,指向的是一个内存地址,但是它没有分配任何内存空间,即底层元素包含0个元素。

nil 切片被用在很多标准库和内置函数中,描述一个不存在的切片的时候,就需要用到 nil 切片。比如函数在发生异常的时候,返回的切片就是 nil 切片。nil 切片的指针指向 nil。


https://blog.csdn.net/hello_bravo_/article/details/103772016
https://www.jianshu.com/p/030aba2bff41
https://www.jianshu.com/p/030aba2bff41

猜你喜欢

转载自blog.csdn.net/java_sparrow/article/details/106868152