21

我正在自学 Java,我书中的一个复习练习要求区分“对象”和“对象变量”。

我知道对象是什么(类的特定实例),但我似乎在书中(无答案部分)或互联网上的任何地方都找不到“对象变量”一词。

有谁知道这个词的意思?

4

6 回答 6

16

我会咬。

对象是实例本身,而对象变量是对对象的引用。

这是一个人为的例子:

Object o = new Object();
Object ref1 = o;

在他的例子中,只有一个 Object 实例,但它被两个 Object 变量引用:o 和 ref1。

当对象变量不再引用对象时,该对象将被垃圾回收。

于 2013-07-02T19:01:11.903 回答
13

它是“实例变量”的同义词:

class A {
    static int m;  // <-- class variable
    int n;         // <-- instance variable
    ...
}

显然,这个术语不是很常用,最好通过坚持“实例变量”来避免任何潜在的歧义。

于 2013-07-02T19:01:20.550 回答
1

tl;博士;fmoe

我在 Cay Horstmann, Big Java, Early Objects (John Wiley & Sons, 2013), 73中发现的复习练习中遇到了同样的问题。

Cay将对象变量定义为存储对对象内存位置的引用的变量(其类型是类)。

    Rectangle box = new Rectangle();
  • box是对象变量,它存储对新实例化的 Rectangle 对象的内存位置的引用。

可以存在多个对象变量,它们存储对对象内存位置的相同引用。

    Rectangle box = new Rectangle(5,10,20,30);
    Rectangle box2 = box;

在任一对象变量上调用 mutator/mutagenic 方法(修改调用该方法的对象)会改变(修改)对象,因为对象变量引用同一对象的内存位置

    box2.translate(15, 25); 
    System.out.println(box.getY()); // 35.0
    System.out.println(box2.getY()); // 35.0

如果您将 Cay 的定义与来自The Java Tutorials和许多其他来源的信息进行比较,这会有点令人困惑,但我相信当放在 Cay 的书的上下文中时,这就是您问题的答案。

我更喜欢这种观点 => 对象的内存位置存储在对象引用中(每个 Cay 的对象变量)。当我在对象上调用方法时,我指定对象引用,后跟点 (.) 运算符,然后是方法名称。

    objectReference.method();

如果一个类的公共接口允许访问它的一个或多个实例化对象的字段(AKA 实例变量、对象变量、类成员变量、属性或属性...取决于编程语言和文档),那么我可以通过指定对象引用,后跟点 (.) 运算符,后跟字段名称

    objectReference.fieldName;

为什么我更喜欢这个?我不喜欢多次使用变量作为名词。重载的语义使我简单的头脑感到困惑。

于 2013-09-12T01:59:09.580 回答
0

@Faaris Cervon:对象变量是不创建任何对象但引用某个对象的变量.. exmp:Date d1= new Date();

d1 是一个对象。

日期 d2; d2 不是对象,也不是指任何对象,但它可以保存任何日期类型的对象。d2=d1;// 有效的。

因此 d2 是一个对象变量。重要的是要记住,对象变量实际上并不包含对象,但它引用了某个对象。

于 2013-12-09T08:09:43.347 回答
0

我也找到了对你有帮助的东西。对象、对象变量和对象引用之类的词很少。

对象变量和对象引用的相似之处在于对象变量存储对象的引用,而对象引用描述了对象的位置。(您可能在这里感到困惑,所以只需将它们视为相同)

考虑一个例子::

车类{
....
....
}

汽车奥迪Q7;//S1
汽车 AudiQ8 = new Car(); //S2

在 S1 中,我们只创建了对象。意味着它不涉及内存。

在 S2 中,我们创建了一个对象变量/引用,这意味着它引用了内存位置。

于 2015-03-29T06:31:22.347 回答
0

在大学里,对象变量是:“一个变量,其类型是一个类,并且它持有对该类实例的对象的引用”

Object thing = new Object();
于 2021-01-12T05:38:42.460 回答