相同点:
都能够直接引用对象,并对对象进行操作.
不同点:
指针 | 引用 |
指针类型的变量能够保存一个对象的地址 | 引用是一个对象的别名 |
可以为空nil,可以不初始化 | 不可以为空nil,必须初始化 |
当设计一个变量用于指向另一个对象,但是变量有可能为空,这时应该使用指针. | 当设计一个变量总是指向一个对象,不允许为空,这时应该使用引用. |
声明指针可以不指向任何对象,因此使用指针之前,要做判空操作 | 不用做判空操作,因为它一定不为空!=nil |
可以改变指向,从而指向其他对象 | 引用不可改变指向,它对一个对象"致死不渝" |
对指针的操作,会导致指针指向下个对象,而不是改变指向对象的内容. | 对引用的操作直接反应到所指向的对象上.对象的内容改变了. |
func new(Type) *Type | func make(t Type,size ...IntegerType) Type |
指针传递本质:值传递,传递一个地址值.形参为函数的局部变量,实参传递给形参是一个副本 | 引用传递本质:传递的是引用变量的地址 |