我正在自学 Java,我书中的一个复习练习要求区分“对象”和“对象变量”。
我知道对象是什么(类的特定实例),但我似乎在书中(无答案部分)或互联网上的任何地方都找不到“对象变量”一词。
有谁知道这个词的意思?
我会咬。
对象是实例本身,而对象变量是对对象的引用。
这是一个人为的例子:
Object o = new Object();
Object ref1 = o;
在他的例子中,只有一个 Object 实例,但它被两个 Object 变量引用:o 和 ref1。
当对象变量不再引用对象时,该对象将被垃圾回收。
它是“实例变量”的同义词:
class A {
static int m; // <-- class variable
int n; // <-- instance variable
...
}
显然,这个术语不是很常用,最好通过坚持“实例变量”来避免任何潜在的歧义。
tl;博士;fmoe
我在 Cay Horstmann, Big Java, Early Objects (John Wiley & Sons, 2013), 73中发现的复习练习中遇到了同样的问题。
Cay将对象变量定义为存储对对象内存位置的引用的变量(其类型是类)。
Rectangle box = new 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;
为什么我更喜欢这个?我不喜欢多次使用变量作为名词。重载的语义使我简单的头脑感到困惑。
@Faaris Cervon:对象变量是不创建任何对象但引用某个对象的变量.. exmp:Date d1= new Date();
d1 是一个对象。
日期 d2; d2 不是对象,也不是指任何对象,但它可以保存任何日期类型的对象。d2=d1;// 有效的。
因此 d2 是一个对象变量。重要的是要记住,对象变量实际上并不包含对象,但它引用了某个对象。
我也找到了对你有帮助的东西。对象、对象变量和对象引用之类的词很少。
对象变量和对象引用的相似之处在于对象变量存储对象的引用,而对象引用描述了对象的位置。(您可能在这里感到困惑,所以只需将它们视为相同)
考虑一个例子::
车类{
....
....
}
汽车奥迪Q7;//S1
汽车 AudiQ8 = new Car(); //S2
在 S1 中,我们只创建了对象。意味着它不涉及内存。
在 S2 中,我们创建了一个对象变量/引用,这意味着它引用了内存位置。
在大学里,对象变量是:“一个变量,其类型是一个类,并且它持有对该类实例的对象的引用”
Object thing = new Object();