【发布时间】:2013-04-02 08:08:38
【问题描述】:
在面向对象的编程语言中,当您定义一个变量时,它最终会成为一个对象的引用。该变量本身不是对象,而是指向带有分配给该变量的值的对象。
问题是它如何如此高效地工作?变量赋值给对象的机制是什么?
我认为组织的方式是一个链表,但是找不到参考数据是如何用 Ruby 或 Java 等语言构建的。
【问题讨论】:
标签: oop variables object data-structures
在面向对象的编程语言中,当您定义一个变量时,它最终会成为一个对象的引用。该变量本身不是对象,而是指向带有分配给该变量的值的对象。
问题是它如何如此高效地工作?变量赋值给对象的机制是什么?
我认为组织的方式是一个链表,但是找不到参考数据是如何用 Ruby 或 Java 等语言构建的。
【问题讨论】:
标签: oop variables object data-structures
在面向对象的编程语言中,当您定义一个变量时,它最终会成为一个对象的引用。
这并不总是正确的。例如,C++ 可以被认为是一种面向对象的语言,但该语言的用户可以将变量用作引用/指针或显式用作值。
但是,您是对的,因为某些(通常是更高级别的)OO 语言隐式使用引用,因此该语言的用户不必担心这些关于性能的实现“细节”。他们试图为此承担责任。
这是如何有效地工作的?变量赋值给对象的机制是什么?
考虑一个简单的例子。当一个对象作为参数传递给函数时会发生什么?必须制作该对象的副本,以便函数可以在本地引用该对象。对于隐式使用引用的 OO 语言,只需要复制对象的地址,而真正的按值传递需要复制对象的完整内存内容,这可能可能非常大(想想对象的集合或类似的集合)。
对此的详细解释涉及到组装的核心。例如,为什么首先需要将对象复制到函数调用?为什么地址的间接寻址不会比直接值花费更长的时间?等等。
相关
What's the difference between passing by reference vs. passing by value?
【讨论】: