对象变量与对象的实例不同.区分变量,值和对象非常重要.
例如:
String x = "hello";
变量是x.它就像一张纸,上面写着一个值.
变量的值是一个引用 – VM可用于获取字符串对象本身的一些数据.它不一定是一个地址 – 它只是“获取对象数据的一种方式”. (有关这方面的更多信息,请阅读Eric Lippert的博客文章“References are not addresses” – 这是关于C#而不是Java,但它的原理是相同的.)
对象本身是一个单独的实体.
要使用一个真实世界的例子,想象一下,我有一张纸,上面写着我的家庭住址.这里显然有三件事:
>那张纸(就像一个变量).这张纸本身不是我的家庭住址,也不是房子.它只是可以存储价值的东西.
>我的家庭住址不是一张纸,也不是房子.这只是让某人到我家的价值.
>我的房子既不是一张纸,也不是一个地址.这是一个对象.
当您考虑参数传递和变量赋值之类的事情时,这变得很重要.例如:
House x = new House("Jon");
House y = x;
这里我们有两个变量,x和y,就像两张纸一样.我们建造一所房子,并在x上写下它的指示.然后我们将写在x上的值复制到y中.请注意,它们仍然是完全独立的纸张 – 但它们目前具有相同的值.只有一个物体 – 我们只建造了一个房子 – 但现在两张纸上有相同的方向.
如果一个人按照纸张上的指示x并将前门涂成红色,那么第二个人按照纸张上的指示y,他们会找到一个带有红色前门的房子.
另一方面,如果一个人在纸张x上潦草地写下方向,那么这根本不会影响纸张上的指示.