我正在和我的老师谈话,她提到一个对象变量(她的意思是一个对象的实例)不包含对象本身,而是包含内存中的地址.
我听说在Java中,对象的实例实际上包含对内存中对象的引用.我错了吗?引用与包含内存中的地址或其他内容相同吗?
Jon*_*eet 12
一个对象的变量是不一样的对象的实例.这是真的,你的变量,它们的值,并区分对象重要.
例如:
String x = "hello";
Run Code Online (Sandbox Code Playgroud)
该变量是x.它就像一张纸,上面写着一个值.
变量的值是一个引用 - VM可用于获取字符串对象本身的一些数据.它不一定是一个地址 - 它只是"获取对象数据的一种方式".(有关这方面的更多信息,请阅读Eric Lippert的博客文章"引用不是地址" - 这是关于C#而不是Java,但它的原理是相同的.)
所述对象本身是一个独立的实体.
要使用一个真实世界的例子,想象一下,我有一张纸,上面写着我的家庭住址.这里显然有三件事:
当您考虑参数传递和变量赋值之类的事情时,这变得很重要.例如:
House x = new House("Jon");
House y = x;
Run Code Online (Sandbox Code Playgroud)
在这里,我们有两个变量,x并且y,像两张纸.我们建造一所房子,并写下它的指示x.然后,我们复制形式,它的价值x成y.请注意,它们仍然是完全独立的纸张 - 但它们目前具有相同的值.只有一个物体 - 我们只建造了一个房子 - 但现在两张纸上有相同的方向.
如果一个人按照纸上的指示x并将前门涂成红色,那么第二个人按照纸上的指示y,就会找到一个带红色前门的房子.
另一方面,如果一个人在纸上潦草地写下指示x,那根本不会影响写在纸上的指示y.