地址,指针与引用
目录
区别
概念 | 说明 |
---|---|
指针 | 变量在内存中的地址,C,C++ 在使用,再高级点的语言,抛弃了,因为管理内存地址很麻烦。 |
传值 | 传值很简单,就是将其他变量的值拷贝一个副本给本变量。 需要注意的是有些语言存在常量池,也就是并未拷贝值副本。 在 PHP 语言中,除了对象,其他变量都是传值。 在 Java 中,8 种基本数据类型都是传值。 |
引用 | 在 PHP 中存在引用,引用可以认为是指针,但是却又不能进行指针运算。 同一个引用的变量,一改全改。 |
地址值 | 在 Java 中出现地址,其实也是传值,不过传的指针的地址值。 同一个地址值的变量,存在重新赋值时,不会像 PHP 那样一改全改。 |
==注意==:地址 = 指针,地址值 ≠ 地址,地址值 = 指针的地址。
传值
传值很简单,就是将基本数据类型的值拷贝一份副本。
引用
下面的代码都是在测试框架下,验证,TDL(Test Drive Learn)
|
|
PHP 手册
引用定位
地址值
Java 中的地址值传递。
|
|
|
|
总结
通过上面代码我们可以得出结论,PHP 中的对象才是真正的引用传递。而 Java 中的非基本数据类型传递的不是引用,而是引用的地址值,或者说是引用的地址值的副本。
PHP 中将$var3
置null
,导致$val2
和$val1
都为null
。因为他们是引用,是地址,是指针。
Java 中b
,c
置null
,而a
和d
的值却没有变。因为他们都是地址值,是指针的地址。