(为了清楚起见,我在这里给出的解释是特定于Java和C#的。不要以为它适用于其他语言,尽管它的某些部分可能。
我喜欢用一个比喻来告诉别人我住在哪里。我可能会在一张纸上写下我的地址:
- 变量就像一张纸。它拥有一个值,但它本身不是值。你可以划掉那里的任何东西,写一些别的东西。
- 我写在纸上的地址就像一个参考。这不是我的房子,但这是一种导航到我家的方式。
- 我的房子本身就像一个物体。我可以给出对同一对象的多个引用,但只有一个对象。
这有帮助吗?
值类型和引用类型之间的区别是写在纸上的内容。例如,这里:
int x = 12;
就像有一张直接写着数字12的纸。而:
Dog myDog = new Dog();
不会在纸上写Dog对象的内容本身 - 它会创建一个新的,然后在该纸上写一个对狗的引用。Dog
用非类比术语来说:
- 变量表示内存中的存储位置。它有一个名称,您可以在编译时引用它,并且在执行时它有一个值,该值将始终与其编译时类型兼容。(例如,如果您有一个变量,则该值将始终是对类型对象或某个子类的引用 - 或引用。
Button
Button
null
- 对象是一种独立的实体。重要的是,变量或任何表达式的值从来都不是对象,而只是一个引用。对象有效地包括:
- 字段(状态)
- 类型引用(在对象的生存期内永远不会更改)
- 监视器(用于同步)
- 引用是用于访问对象的值 - 例如,调用对象上的方法,访问字段等。通常使用运算符导航引用。例如,如果 是一个变量,则将取(引用)的值并调用该引用引用的对象。结果可能是参考...然后,我们调用该引用所引用的对象。
.
foo
Person
foo.getAddress().getLength()
foo
getAddress()
String
getLength()