java中的引用和对象有什么区别?

Rah*_*ara 18 java reference object

我有类GUI,所以我可以创建这样的对象:

GUI g1 = new GUI();
Run Code Online (Sandbox Code Playgroud)

和这样的引用变量:

GUI g2;
Run Code Online (Sandbox Code Playgroud)

现在据我所知,g2是一个引用变量,它引用了GUI类,g1是GUI类的一个对象.g1和g2有什么区别?我可以使用GUI类的属性与对象,但g2的可能用途是什么?

sle*_*ica 27

参考文献是名称.物体是东西.对于东西,你可以有不同的名称,即使对于实际上不存在的东西也是如此.

您可以声明名称,而不实际给它们任何"真实"含义,如下所示:

GUI g1;
Run Code Online (Sandbox Code Playgroud)

您可以使用=运算符将名称(要引用的真实内容)分配给名称:

GUI g1 = some_gui;
Run Code Online (Sandbox Code Playgroud)

名称可以随时间改变其含义.同名可以在历史的不同点引用不同的东西.

GUI g1 = some_gui;

doSomething();

g1 = some_other_gui;
Run Code Online (Sandbox Code Playgroud)

还有同义词:多个名称可以指同一个东西:

GUI g2 = g1;
Run Code Online (Sandbox Code Playgroud)

这几乎就是参考文献的作用.它们是用来指代东西的名字.

可以创建东西:

new GUI();
Run Code Online (Sandbox Code Playgroud)

可以在现场创建和命名东西供以后参考(字面意思!):

GUI g1 = new GUI();
Run Code Online (Sandbox Code Playgroud)

可以使用其名称(或其任何名称!)来引用内容:

g1.doSomething();
g2.doSomethingAgain();
Run Code Online (Sandbox Code Playgroud)

可以创建相同类型(类)的不同内容,并以不同方式命名:

GUI g1 = new GUI();
GUI g2 = new GUI();
GUI g3 = new GUI();

GUI g1_synonym = g1;
Run Code Online (Sandbox Code Playgroud)

:)

  • 伟大的第一段.介绍OOP创意的好方法. (2认同)

Azo*_*ous 16

java中的引用和对象有什么区别?

引用是提供访问其类型对象的方法的实体.对象是一种实体,它提供访问其类或类型成员的方法.

通常,如果没有对象的引用,则无法访问该对象.

class GUI
{
    void aMethod()
    {
        // some business logic.
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以aMethod使用或不使用引用进行调用.但你肯定需要一个物体.

没有参考:

new GUI().aMethod(); 
// you can't reuse the object
// bad way to code.
Run Code Online (Sandbox Code Playgroud)

供参考:

GUI aGUIReference = new GUI();
aGUIReference.aMethod();
// Now, the object can be reused.
// Preferred way to code
Run Code Online (Sandbox Code Playgroud)

现在对你的代码行做一点解释:

GUI g1 = new GUI();
// g1 is a reference to an object of GUI class.

GUI g2;
// g2 is a reference that can point to an object of GUI class
// but currently not pointing to any.
Run Code Online (Sandbox Code Playgroud)

唯一的区别的B/W g1g2的是,g1与一个对象,但初始化g2指向null

g2 = g1;
// it means g2 will point to the same object g1 is pointing to
// only one object but two references.
Run Code Online (Sandbox Code Playgroud)

  • 这需要是公认的答案 (3认同)
  • 这是正确的答案。 (2认同)

MBy*_*ByD 5

你是无法使用g2,直到你分配对象给它,因为目前它不指向任何对象,而g1已经指向一个GUI对象,你可以用它.

这个:

GUI g1 = new GUI();
Run Code Online (Sandbox Code Playgroud)

几乎相当于:

GUI g1;
g1 = new GUI();
Run Code Online (Sandbox Code Playgroud)