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

Java真的有指针吗?

申昌勋
2023-03-14
问题内容

我在google上寻找答案,但不满意。

我的逻辑:

Java 使用内存位置,它位于您看不到或无法访问它的场景的后面(据我所知,也许有一些我不知道的访问方法)。

我的困惑/问题:

与专门使用指针的c ++这样的编程语言相比,没有专门为可在任何系统上使用的Internet设计的Java这样的编程语言中没有指针的目的是什么?

编辑

你们中的许多人都在说“保持简单”。如果是这样,那为什么为什么流行的编程语言(如)c++仍然使用指针呢?


问题答案:

简单的答案是,这是设计决定。稍长一点的答案是,C ++中的指针仅对于内存操作才是必需的,这不是适用于Java的概念(请参见下文)。

Java设想了一个相当系统的,面向对象的编程模型,并且所有基于类的类型基本上 总是 通过指针进行处理,因此,这一事实根本不会暴露给用户。

在高质量,系统化和惯用的编程中,也不需要C
++中的原始指针。原始指针允许您执行的操作(即指针算术)通常被认为是“不安全的”,因此完全将它完全排除在Java之外。

顺便提一下,人们尝试使用C和C 中的指针进行的许多操作实际上是未定义的行为。正确使用指针会给您带来相当有限的选项集,在惯用的C

中,大多数选项可以做得更好。

关于指针的唯一 真正
用途是直接内存操作。由于Java不希望您这样做(而且实际上,其垃圾回收的内存管理会主动干扰并被手动内存操作破坏),因此不需要显式指针。

更新后:( 我认为)最后一段是最引人注目的解释:在C 中,您 需要 能够编写自己的内存管理代码(请参阅“分配器”)。并且内存 必须
通过指针进行处理。因此,我的严格答案是,在实现内存管理时,您需要C
中的指针,而从没有其他要求。



 类似资料:
  • 问题内容: 如果Java没有指针,那么关键字在Java中做什么? 问题答案: 如前所述,Java有引用。这些有什么不同? 你不能对这些执行算术运算或其他类似运算 它们不指向包含对象的内存(即它们不是另一个名称的指针)。JVM可以自由地在VM内存中移动对象,并且很可能在垃圾回收期间执行。尽管对象在内存中移动,但是引用仍然指向该对象。 因此它们不像C ++引用(直接指向对象)。也许更好的名字是hand

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

  • 问题内容: C ++支持指针,而Java不支持指针。但是,当许多程序员质疑您如何在没有指针的情况下工作时,启动器开始说“受限指针”。所以我们可以说Java支持受限指针吗? 问题答案: 这里的术语很模糊。 Java支持所谓的“引用”。引用的行为 非常 类似于类似C / C ++的语言中的指针。他们 不会 采取同样的方式“引用”,在这些语言的工作。 C语言中的指针与Java语言中的引用之间的 主要 区

  • 如果C中有指针(char*names[])和指向指针的指针(char**cur_name=names);有指向指针的指针吗? 或者指向指针的指针只是一个链表?也许这是个愚蠢的问题,但我想知道答案。

  • 指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。 如果一个指针指向的是另外一个指针,我们就称它为 二级指针,或者 指向指针的指针。 假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示: 将这种关系转换为C语言代码: 指针变

  • 6. 指向指针的指针与指针数组 指针可以指向基本类型,也可以指向复合类型,因此也可以指向另外一个指针变量,称为指向指针的指针。 int i; int *pi = &i; int **ppi = π 这样定义之后,表达式*ppi取pi的值,表达式**ppi取i的值。请读者自己画图理解i、pi、ppi这三个变量之间的关系。 很自然地,也可以定义指向“指向指针的指针”的指针,但是很少用到: int