Java中是否存在“指针”或“不安全代码”的概念?

昨天我正在参加一家知名欧洲公司的CTO的演讲,直到最近他还不知道java有指针。 在面对他时,他说他绝对相信java中存在指针/不安全代码。

有一个名为sun.misc.Unsafe的类,这是真的。 但它没有在Java代码中使用指针(因为Java没有指针,虽然我同意java引用在概念上类似),但大多数是使用本机代码实现的。

正如我在评论中提到的,这不是公共API的一部分,不应该被客户端代码使用。 但是,当您查看java.util.concurrent.atomic包中的Atomic*类的源代码时,您可以看到它正在工作。

Java中没有指针,只有安全引用。 不幸的是,你的知名CTO错了。

通过JNI集成了不安全的代码。

http://en.wikipedia.org/wiki/Java_Native_Interface

Java有指针。

Java是否有指针的混淆与Java是通过引用调用还是按值调用的讨论密切相关。

不知情的人认为Java没有指针,并且因为一个方法可以改变一个传入的对象,这个改变的效果可以传递给调用者,他们认为它必须通过引用调用。

但这不正确。

会发生什么是Java 指针按值传递 。 Java中的对象没有其他类型的变量而不是指针变量,并且没有引用调用。

“不安全”的故事是另一回事。 这通常不同于Java是否有指针的问题。 Java的指针是安全的; 它们指向对象并使用正常的语言结构,它们不能被操纵以指向任意的内存位置。

然而,有JNI,但是本机代码确实可能是不安全的东西,而不是Java代码。

还有Real-time Java(jsr-1),您绝对可以访问系统中的特定内存位置。 然而,这是一个非常特殊且相当罕见的Java版本,主要用于嵌入式目的。 如果这意味着我想它会被明确提到。

Java没有指针,只有对象的引用。 引用类似于指针,因为它指向一个变量,一个对象,但是您无法查看或编辑此引用的地址内存,您可以在C中执行此操作。

另一件事。 在C中,您可以使用引用/解除引用操作来管理指针,将*指针的第一个放在第一位。 在Java中,此操作(引用/解除引用)完全不存在,因为它是完全自动的,对用户隐藏。

维基百科和甲骨文的其他信息。

指针是指向参考的概念。 在C和C ++中,您可以显式访问指针,但在java中我们使用引用指向对象。 例如,如果您将一个实例传递给一个方法,它的引用传递我们知道,但最终传递指针。 当您在方法中更改实例的状态时,它会在完成方法调用后使用该实例时进行反映。

我们在java中使用引用,它是关于JVM的指针。

当我们使用new运算符时,它在堆中创建实例并将地址返回给它指向的引用。

我相信这会回答你的问题,如果不是你可以评论我的答案。

您可以在Java( JNI )中调用本机函数,因此在这个意义上您可以使用指针。 但除此之外 – 不,Java中没有指针。

他可能会对按值调用和按引用调用产生轻微的混淆。 如果他来自C,他可能认为引用调用等于指针。 只是一个猜测。