【问题标题】:Are Java 'pointers' integers?Java“指针”是整数吗?
【发布时间】:2015-04-18 00:08:39
【问题描述】:

我正在学习数据结构和分析。我们已经讨论了对象类型的赋值和比较如何比基本类型(例如 int)的赋值和比较慢得多。

我记得学习 C 语言(几乎是 30 年前)以及 C 语言中的指针是(或曾经是)整数调用。今天的Java是否相似,是对内部实例对象的引用,是内存的整数地址,因此是比较,例如

if (MyObject != null) {...}

框架内的整数运算?

我希望我的问题很清楚。我一直在研究,但找不到关于 Java 如何管理其动态内存的明确答案。

【问题讨论】:

  • 我发现这篇文章很混乱。您似乎暗示“对象比较很慢”,并且比较指针很快,因此更好。但这些是完全不同的东西。一个是关于价值平等,另一个是关于对象身份。用Python打个比方,一个是关于99 == 99,一个是关于301 is 301
  • 我不是在暗示,我是在问。感谢您的意见。
  • Java 中的所有值在内部都是“整数”,包括浮点数。这是如何解释它们的问题。但是你会混淆比较 pointers 和比较 objects 指向的东西——两个完全不同的东西。将两个 Java“指针”(引用)与== 进行比较的速度与比较两个 long 值的速度差不多。
  • 计算机中的一切实际上都是二进制整数,其他一切都是构造。
  • @PeterLawrey - 它会有所不同。使用 long 是最坏的情况。

标签: java pointers reference jvm


【解决方案1】:

简短的回答是肯定的,对对象的引用存储为指针,就像在 C 中一样。

我不确定存储为“整数”是什么意思,但如果你想要像在 C 中那样对它们进行一些操作(例如,将整数添加到指针等),那么你可以不使用 Java。

其余的几乎相同,只是由 Java 处理。

JLS 4.3.1 指定对对象的引用存储为指针:

引用值(通常只是引用)是指向这些的指针 对象,以及一个特殊的空引用,它不引用任何对象。

【讨论】:

  • 在 C 中,原始的 ANSI C 之前的 C 中,指针是整数,因此对指针的操作,特别是赋值,与对整数的操作一样快。我不是在寻找直接控制,我只是好奇此类操作的开销是多少。谢谢!
猜你喜欢
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
相关资源
最近更新 更多