java真的有指针吗?

java真的有指针吗?,java,c++,pointers,Java,C++,Pointers,我在谷歌上寻找答案,但我并不满意 我的逻辑: Java使用内存位置,它就在后台,您无法看到或访问它(据我所知,可能有一些访问它们的方法我不知道) 我的困惑/问题: 编程语言中没有指针的目的是什么,它专门设计用于互联网,用于任何系统,而不是使用C++之类的编程语言,它使用指针? 编辑 你们中的许多人都在说“保持简单”。如果是这种情况,那么为什么像c++这样的流行编程语言会使用指针呢?Java有指针吗。事实上,Java中的一切都是指针(称为引用) 例外情况:int、boolean、char等 因为

我在谷歌上寻找答案,但我并不满意

我的逻辑:

Java
使用内存位置,它就在后台,您无法看到或访问它(据我所知,可能有一些访问它们的方法我不知道)

我的困惑/问题:

编程语言中没有指针的目的是什么,它专门设计用于互联网,用于任何系统,而不是使用C++之类的编程语言,它使用指针? 编辑



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

Java有指针吗。事实上,Java中的一切都是指针(称为引用)

例外情况:int、boolean、char等


因为一切都是指针,所以不需要星号来改变。

出于同样的原因,java没有无符号类型。语言设计者决定不包括它们,以保持语言“更简单”。主要原因是指针会导致许多难以识别的错误。以Java的方式,程序员的生活更容易


<> >强> >:用指针编写的< P>简单的答案是它是一个设计决策。稍长的答案是C++中的指针只用于内存操作,这不是应用于java的概念(见下文)。 Java设想了一个相当系统的、面向对象的编程模型,所有基于类的类型基本上都是通过指针来处理的,因此这一事实根本不向用户公开

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

注意,人们试图用C和C++中的指针做很多事情实际上是未定义的行为。使用指针正确地留给你一组相当有限的选项,其中大多数可以在惯用的C++中做得更好。 指针的唯一真正用途是直接内存操作。由于Java不希望您这样做(事实上,它的垃圾收集内存管理会主动干扰并被手动内存操作破坏),因此不需要显式指针


更新之后:(我认为)最后一段最引人注目的解释是:在C++中,你需要能够编写自己的内存管理代码(参见“分配器”)。内存必须通过指针来处理。所以我的严格回答是,当你实现内存管理时,你需要C++中的指针,而不是其他的。

< P>因为java意味着一个简单、安全、相对简单的编程语言。指针是一种锐利的工具,Java设计者决定不把它交给程序员

@从某种意义上说,oltarus是对的,Java的引用是指针,但有一个主要区别:不能对它们进行算术运算,而可以对指针进行算术运算。指针算法是指针错误的一个主要来源,因为您使指针指向内存中的无效位置(例如,忘记初始化它们,或通过关闭一个错误)

<> >强>更新< /强>:C++有指针,因为它们是C++设计支持的低级系统编程所必需的。C++被设计成“更好的C”,并取代了该语言,这意味着它具有实现操作系统和设备驱动程序所需的所有必要的设备。在没有指针的语言中这样做几乎是不可能的


<> P. C和C++都遵循这样的哲学:如果你要求它,你几乎可以完全访问硬件,所以你可以做任何你想做的事情,但是语言也不会阻止你做蠢事。Java,OTOH,通过在虚拟机沙箱中运行程序来限制您对机器的访问。

在内部,对对象的引用被实现为指针。虽然没有指针算法


C++有指针,因为它是作为C的超集构建的,C确实有指针。C有指针,因为它是60年代设计的。当时计算机的内存非常少,指针允许实现字符串、数组和参数传递

这是白皮书的摘录:

2.2.9不再有指针

大多数研究都认为指针是 使程序员能够将错误注入到他们的代码中。鉴于此 结构消失了,数组和字符串是对象,需要 指向这些结构的指针消失了。因此,Java没有指针数据 类型。任何需要数组、结构和指针的任务 通过声明对象和 对象数组。而不是对数组进行复杂的指针操作 指针,您可以通过其算术索引访问数组。爪哇 运行时系统检查所有数组索引,以确保索引在 数组的边界


因为Java中没有指针,所以不再有悬空的指针和因指针不正确而导致的内存浪费。

首先,明显的问题是Java不能保证对象在其整个生命周期中都保持在同一地址

高效的垃圾收集器依赖于能够移动对象,这样做会使(以前)指向该对象的任何指针无效

其次,Java几乎没有指针。 C/C++指针并不像您想象的那样


一个C++指针不允许你