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

时间:2012-02-12 09:50:57

标签: java object reference

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

GUI g1 = new GUI();

和这样的引用变量:

GUI g2;

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

9 个答案:

答案 0 :(得分:26)

参考文献是名称。物体是东西。对于东西,你可以有不同的名字,即使是那些实际上并不存在的东西。

您可以声明名称,而不会实际赋予它们任何“真实”含义,如下所示:

GUI g1;

您可以使用=运算符

为名称指定含义(要引用的实际内容)
GUI g1 = some_gui;

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

GUI g1 = some_gui;

doSomething();

g1 = some_other_gui;

还有同义词:多个名称可以引用相同的东西:

GUI g2 = g1;

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

可以创建东西:

new GUI();

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

GUI g1 = new GUI();

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

g1.doSomething();
g2.doSomethingAgain();

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

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

GUI g1_synonym = g1;

:)

答案 1 :(得分:14)

  

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

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

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

class GUI
{
    void aMethod()
    {
        // some business logic.
    }
}

您可以在有或没有参考的情况下致电aMethod。但你肯定需要一个物体。

没有参考:

new GUI().aMethod(); 
// you can't reuse the object
// bad way to code.

参考:

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

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

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.

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.

答案 2 :(得分:5)

在为对象分配对象之前,您无法使用g2,因为当前它不指向任何对象,而g1已指向GUI对象,而您可以使用它。

此:

GUI g1 = new GUI();

几乎相当于:

GUI g1;
g1 = new GUI();

答案 3 :(得分:3)

References是指向名为objects.

的内存块的指针
GUI g1 = new GUI();

为了解释,让我打破上述说法。

GUI g1;
g1 = new GUI();

第1步:g1是一个引用变量(指针),尚未指向任何有效的内存位置。

第二步:第二步为类GUI的对象分配内存,赋值操作使引用变量g1指向此对象(内存位置)。 new关键字为类GUI的对象分配内存。

答案 4 :(得分:2)

对象就像是在称为堆的空间中浮动的气泡。变量只是这些气泡的链接。表达式new GUI()创建一个对象,=运算符将其链接到变量g1g2也是一个变量,但它没有链接到任何对象。您可以通过编写

轻松交换它们
g2 = g1;
g1 = null;

现在g2指的是g1在开头引用的对象,而g1指的是什么。对象完好无损,只更改了变量。

答案 5 :(得分:0)

实际上,您的变量的Java名称是一个引用(原始类型除外)。您无法使用g2,因为它尚未初始化,甚至不为空。尝试为g2调用方法时,会出现编译时错误。在GUI g2; g2未指向内存中的对象之后。如果将g2设置为null,就像这个GUI g2 = null;一样,你可以在声明后使用它,但是如果你为g2调用一个方法,你将得到一个运行时NullPointerException。

答案 6 :(得分:0)

两者,g1和g2都是参考。但g2未初始化,因此无法在代码中使用。

//Tells that g1 g2 should hold Gui object. Currently they are not holding any object.
Gui g1;
Gui g2;

//Now g1 reference holds object. g2 reference still doesn't point to any object.
g1 = new GUI();

答案 7 :(得分:0)

参考文献是名称。物体是东西。对于东西,你可以有不同的名字,即使是那些实际上并不存在的东西。

您可以声明名称,而不会实际赋予它们任何“真实”含义,如下所示:

GUI g1;

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

GUI g1 = some_gui;

doSomething();

g1 = some_other_gui;

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

可以创建东西:

new GUI();

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

GUI g1 = new GUI();

:)

答案 8 :(得分:0)

引用是" hook"你可以挂在上面的对象。 一个对象可能在多个钩子上。

相关问题