对象和变量有什​​么区别?

syc*_*one 0 java

我遵循了www.patrickvideos.com上的 java SE 教程,并在有关“类和对象”的章节中遇到了问题。制作教程的人给出了以下代码示例:

Employee alex;
Employee linda;
Employee john;
Run Code Online (Sandbox Code Playgroud)

他明确表示"alex, linda, john are what you call objects"。但是,如果我没有记错的话,变量本身不能是对象,而只是保存对对象或类实例的引用。那么,alex, linda, john对象是对象还是可以安全地假设它们是对象的引用并且该人正在传播错误信息?

Bas*_*que 5

是的,参考变量

\n

你是对的,alexlindajohn都是参考变量

\n

这三个容器都是小容器,它们要么不保存任何内容(null),要么保存对内存中其他位置的对象设置的引用指针)。这三个变量不保存对象,但它们知道如何让您到达对象。

\n

鉴于 Java 的语法,我们往往会忘记这种区别。在我们日常的编程工作中,我们通常将其视为alex对象。我们一般认为:

\n
\n

alex持有一个Person代表名为 Alex 的人类的物体

\n
\n

\xe2\x80\xa6 而技术事实是:

\n
\n

alexPerson可能持有一个引用,该引用可以引导我们到其他地方保存我们想要访问的对象的内存块

\n
\n

alex在教程中,不断引用和作为参考变量可能会很累并且分散注意力linda。因此,也许我们应该给教程的作者一些诗意的许可,将它们称为对象。

\n

示例代码

\n

一些示例代码,使用Java 16+ 中的记录功能。

\n
record Person( String firstName , String lastName , Color favoriteColor ) { }\n\nPerson alex = new Person( "Alex" , "Peterson" , Color.MAGENTA );\nPerson linda = new Person( "Linda" , "Greystone" , Color.GREEN );\nPerson john = new Person( "John" , "Petrov" , Color.YELLOW );\n
Run Code Online (Sandbox Code Playgroud)\n

每次调用都会new Person实例化一个对象,即在 RAM 中的某个位置分配一块内存来保存我们的三个成员字段(状态)以及我们认为是命名方法(行为)的可执行代码的句柄。(作为记录,编译器隐式创建构造函数、getter、equals&hashCodetoString方法。另外,您可以添加更多。)

\n

调用new Person返回一个引用,本质上是新 Person 对象/实例所在的内存地址。我们将该引用存储在引用变量alex或中linda。我们将这些变量声明为保存类型对象的引用Person

\n

指向对象的引用变量图

\n