JVM的引用类型

时间:2011-01-22 11:34:48

标签: java jvm

在一些Java文献中,声明

  

Java虚拟的引用类型   机器巧妙地命名   参考

广受欢迎。但是,作者倾向于不解释为什么这样的陈述是有效的。让我更了解这一点的另一件事是

  

JVM的引用类型是什么意思? JVM是否在堆中表示自己?

对此声明表示赞赏。

谢谢,

Ashmawy

4 个答案:

答案 0 :(得分:10)

您在这里找到的词是irony

  使用单词来表达与其字面含义相反的含义

在这句话中使用“聪明”显然具有讽刺意味。 “Java虚拟机的引用类型具有明确的非常明显的名称'引用'”是另一种阅读该句子的方法。

答案 1 :(得分:5)

我认为cleverly部分与引用类型通常称为pointer的事实有关,这使得读者需要学习两个术语。 JVM术语仅使用术语reference

还有一个历史背景。

引入Java时,其最大的竞争对手是C ++。 C ++的主要问题是它被认为太难了。 Java最初将自己定位为C ++的 easy alternative 。它的语法非常接近C ++,但是从语言中删除了所有困难的东西(运算符重载,模板,多个传递机制)等。

现在抓住了......

Java最初以没有指针的形式销售。说这个的理由是指针被认为是C ++中最困难的东西,所以如果Java不具备它们,它必须是一种更简单的语言。

聪明的部分因此来自简单地为“指针”发明另一个术语。称它们为引用,你可以声明Java没有指针(但引用)。

这导致了许多争论并引起了很多混乱,特别是因为C ++已经有了“引用”一词并将其用于其他东西(虽然在概念上有点相关)。争论通常集中在两个阵营,其中一个声称Java确实没有指针,因为你不能用它们做指针算法而且它们不直接代表内存地址,而另一个阵营说你没有能够使用指针进行算术运算,将其称为指针。

换句话说,使用术语reference是否聪明仍有争议。

答案 2 :(得分:0)

当整段落入上下文时,这一点变得更加清晰:

  

Java虚拟机的引用类型巧妙地命名为reference。类型引用的值有三种形式:类类型,接口类型和数组类型。所有三种类型都具有对动态创建的对象的引用的值。类类型的值是对类实例的引用。数组类型的值是对数组的引用,数组是Java虚拟机中的完整对象。接口类型的值是对实现接口的类实例的引用。另一个参考值是空值,表示引用变量不引用任何对象。

(取自http://javadeveloper-jayaprakash-m.blogspot.com/

我会从中假设“巧妙命名”位指的是引用有三种不同的类型,JVM可以区分每种类型。

答案 3 :(得分:-1)

或许只是表达了JVM设计人员为内存管理采用的不同方法的概念。

如果您记得在C / C ++中,可以自由地为本地堆栈或全局堆中的变量分配内存。在C ++中,可以在方法的本地堆栈中为对象分配内存,然后将整个对象作为参数传递给其他方法。

Java设计人员从开发人员手中夺走了这种自由。您只能在本地堆栈中创建对象,仅在全局堆中创建。因此,Class / Interface / Array类型的每个变量确实是对堆中某些内存地址的引用。并且您不能仅通过引用按值传递对象。

如果您没有选择 - 您甚至不需要考虑您拥有的变量类型 - 值类型或引用类型。