Java中有"指针"或"不安全代码"的概念吗?

Anu*_*s05 24 java pointers

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

Sea*_*oyd 20

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

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

  • 请注意,`sun.misc.Unsafe`类不是Java API中的公共类; 它可能不会(也可能不会)存在于除Oracle之外的其他JVM实现中 - 因此如果您希望程序保持独立于您正在使用的特定JVM实现,请不要使用它. (3认同)

Mik*_*maa 15

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

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

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


Mik*_*aun 10

Java有指针.

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

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

但这不正确.

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

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

然而,有JNI,但是本机代码可能不安全,而不是Java代码.

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

  • Jesper,这是另一种讨论."指针"的官方定义是否必须包含*指向实际内存,其中对象恰好被分配,或者它是否更抽象"指向对象"?真实内存甚至在虚拟地址空间和虚拟机的环境中意味着什么?另外,当不允许指向算术时,指针是否停止作为指针?请注意,在C中你不能乘以两个指针.它们是否比允许这样的系统中的指针更小? (5认同)
  • @Mike我的观点是:当你在谈论其他东西而不是C或C++中的显式指针时,不要调用它*指针*,但这就是人们认为你使用*指针*时的意思. (2认同)

Alb*_*ano 8

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

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

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

  • 是的,这是营销.我只能告诉你,Java引用类似于低级别的C/C++指针,就像你说的那样,但Java中的管理与C/C++完全不同,因为程序员不需要担心指针操作.这是讨论.Java与C/C++不同,因为它具有不同的管理. (2认同)
  • 问题是指针的概念是否由C/C++如何做事来定义."内存地址"是概念指针的重要组成部分,还是指针恰好通过内存地址在C/C++中实现?C++规范是否需要指针作为内存地址? (2认同)