当前位置: 首页 > 面试题库 >

Java中的指针

唐茂实
2023-03-14
问题内容

C
++支持指针,而Java不支持指针。但是,当许多程序员质疑您如何在没有指针的情况下工作时,启动器开始说“受限指针”。所以我们可以说Java支持受限指针吗?


问题答案:

这里的术语很模糊。

Java支持所谓的“引用”。引用的行为 非常 类似于类似C / C ++的语言中的指针。他们 不会 采取同样的方式“引用”,在这些语言的工作。

C语言中的指针与Java语言中的引用之间的 主要 区别是:

  • 您不能在Java中执行指针算术(即,您不能从Java引用中“添加”或“减去”, 只能对其 取消引用或将其与另一个引用进行比较)。
  • 您不能将其强制转换为不兼容的类型:Java具有严格的类型安全性,不能将内存中的字节“重新解释”为其他对象。

对于指针的 某些
用法,这没有真正的效果(例如,链表在两种语言中的工作原理几乎相同),对于其他用法,差别非常大(C中的数组只是奇特的指针算法,在Java中,它们的工作原理却大不相同)。

因此,Java引用可以称为“受限指针”。

维基百科将指针定义为

…一种编程语言数据类型,其值 直接 引用(或“指向”)另一个值

强调我的。根据这个 严格的 定义,Java没有指针。

更通用的参考是指针的超类,但是也禁忌了更抽象的东西,例如文件句柄甚至URL。



 类似资料:
  • 问题内容: 我是Java菜鸟。我已经掌握了将C / C ++指针转换为Java引用的概念,并且进展相当顺利。 我打了一段有指针的代码(即* ptr)。我需要取消引用指针并更改其指向的指针的值(即 ptr =&newthing;) 在Java中这似乎要困难得多。是否有人对如何解决此问题有任何想法?快速谷歌搜索什么都没有。 这是C ++中的代码示例。我想在Java中获得类似的工作,但是ptr_to_p

  • 问题内容: 这可能是普通且琐碎的事情,但我似乎在寻找具体答案时遇到了麻烦。在C#中,有一个委托的概念,它与C ++中的函数指针紧密相关。Java中是否有类似的功能?考虑到指针的缺失,最好的方法是什么?需要明确的是,我们在这里谈论头等舱。 问题答案: 类似函数指针的功能的Java习惯用法是实现接口的匿名类,例如 更新:在Java 8之前的Java版本中,以上是必要的。现在,我们有更好的替代方法,即l

  • 问题内容: 对于我的Java游戏服务器,我发送数据包的操作ID,该操作ID基本上告诉服务器该数据包的用途。我想将每个动作ID(一个整数)映射到一个函数。有没有不用开关就可以做到这一点的方法? 问题答案: 这个如何? (如果需要传递一些参数,请使用具有合适参数的函数定义自己的接口,并使用该接口代替Runnable)。

  • 问题内容: 我已经阅读了这个问题,但是我仍然不确定是否可以在Java中将指向方法的指针保留在Java数组中,如果有人知道这样做是否可行,那将是真正的帮助。我正在尝试找到一种优雅的解决方案,在不编写成百上千个“ if”的情况下保留字符串列表和相关函数。 干杯 问题答案: Java本身没有函数指针(或C#说法中的“委托”)。这种事情往往是用匿名子类来完成的。

  • 问题内容: 我正在O(1)将n个条目推入Java 。 我想在以后的O(1)删除一些独特的项目。 我虽然要保留指向“”的唯一节点的数组,以便稍后再删除它们。 有没有办法在其他任何Java类上执行此操作? 我尝试将迭代器存储到项目。这样我就可以使用。但我知道当时列表上只能有一个迭代器。 我知道一个简单的解决方案可以自己实现链接列表。但是我宁愿使用或已经实施的其他一些Java类。 问题答案: Java

  • 问题内容: 我对lambda不太了解。 如果,为什么该方法仍然有效。毕竟,该对象应该由GC删除,因为没有指向该对象的指针。 还有一件事,为什么我在这里不需要返回声明? 问题答案: 在JLS,第15.13.3描述方法引用的运行评估。 方法参考表达式评估的时间比lambda表达式(第15.27.4节)更复杂。 当方法引用表达式的::分隔符之前具有表达式(而不是类型)时,将立即对该子表达式求值。该 评价