Java中是否有“指针”或“不安全代码”的概念? 1 周,5 日 Questions & Answers 5969 昨天我参加了一家著名欧洲公司的首席技术官的演讲,他说直到最近他还不知道java有指针。在面对他时,他说他绝对确信java中存在指针/不安全代码
# 2 楼答案 Java没有指针,只有对对象的引用。引用类似于指针,因为它指向一个变量、一个对象,但不能查看或编辑该引用的地址内存,这可以在C中实现 还有一件事。在C语言中,可以通过引用/取消引用操作来管理指针,在指针的名称前加*号。在Java中,这个操作,即引用/取消引用,是完全不存在的,因为它是完全自动的,对用户来说是隐藏的 关于Wikipedia和Oracle的其他信息
# 3 楼答案 Java有指针 Java是否有指针的困惑与Java是按引用调用还是按值调用的讨论密切相关 不知情的人认为Java没有指针,而且由于方法可以更改传入的对象,调用方可以看到这种更改的效果,因此他们认为它必须通过引用调用 然而,这是不正确的 在Java中,指针是通过值传递的。Java中除了指针变量之外,没有其他类型的对象变量,也没有引用调用 “不安全”的故事完全是另外一回事。这通常与Java是否有指针的问题不同。Java的指针是安全的;它们指向对象,并且使用正常的语言结构,它们不能被操纵来指向任意的内存位置 然而,有JNI,但是本机代码做了潜在的不安全的事情,而不是Java代码 还有实时Java(jsr-1),您完全可以在其中访问系统中的特定内存位置。然而,这是一个非常特殊且非常罕见的Java版本,主要用于嵌入式目的。如果这是真的,我想它会被明确提到
# 4 楼答案 Java中没有指针,只有安全的引用。不幸的是,你的著名首席技术官错了 不安全代码通过JNI集成 http://en.wikipedia.org/wiki/Java_Native_Interface
# 5 楼答案 指针是指向引用的概念。在C和C++中,你可以显式访问指针,但是在java中,我们使用引用来指向对象。例如,如果您将一个实例传递给一个方法,我们知道它的引用传递,但最终会传递指针。当您在方法中更改实例的状态时,它会反映在完成方法调用后使用该实例的时间 我们使用java中的引用,它是关于JVM的指针 当我们使用new操作符时,它会在heap中创建实例,并返回指向它的引用的地址 我相信这会回答你的问题,如果不是的话,你可以对我的答案发表评论
# 6 楼答案 有一个叫做^{}的类,这是真的。但它在Java代码中不使用指针(因为Java没有指针,尽管我同意Java引用在概念上是类似的),大部分都是使用本机代码实现的 正如我在评论中提到的,这不是公共API的一部分,客户端代码不应该使用它。然而,当您查看the ^{} package中Atomic*类的源代码时,您可以看到它的作用
# 1 楼答案
可以在Java(JNI)中调用本机函数,因此在这个意义上可以使用指针。但除此之外——不,Java中没有指针
# 2 楼答案
Java没有指针,只有对对象的引用。引用类似于指针,因为它指向一个变量、一个对象,但不能查看或编辑该引用的地址内存,这可以在C中实现
还有一件事。在C语言中,可以通过引用/取消引用操作来管理指针,在指针的名称前加*号。在Java中,这个操作,即引用/取消引用,是完全不存在的,因为它是完全自动的,对用户来说是隐藏的
关于Wikipedia和Oracle的其他信息
# 3 楼答案
Java有指针
Java是否有指针的困惑与Java是按引用调用还是按值调用的讨论密切相关
不知情的人认为Java没有指针,而且由于方法可以更改传入的对象,调用方可以看到这种更改的效果,因此他们认为它必须通过引用调用
然而,这是不正确的
在Java中,指针是通过值传递的。Java中除了指针变量之外,没有其他类型的对象变量,也没有引用调用
“不安全”的故事完全是另外一回事。这通常与Java是否有指针的问题不同。Java的指针是安全的;它们指向对象,并且使用正常的语言结构,它们不能被操纵来指向任意的内存位置
然而,有JNI,但是本机代码做了潜在的不安全的事情,而不是Java代码
还有实时Java(jsr-1),您完全可以在其中访问系统中的特定内存位置。然而,这是一个非常特殊且非常罕见的Java版本,主要用于嵌入式目的。如果这是真的,我想它会被明确提到
# 4 楼答案
Java中没有指针,只有安全的引用。不幸的是,你的著名首席技术官错了
不安全代码通过JNI集成
http://en.wikipedia.org/wiki/Java_Native_Interface
# 5 楼答案
指针是指向引用的概念。在C和C++中,你可以显式访问指针,但是在java中,我们使用引用来指向对象。例如,如果您将一个实例传递给一个方法,我们知道它的引用传递,但最终会传递指针。当您在方法中更改实例的状态时,它会反映在完成方法调用后使用该实例的时间
我们使用java中的引用,它是关于JVM的指针
当我们使用new操作符时,它会在heap中创建实例,并返回指向它的引用的地址
我相信这会回答你的问题,如果不是的话,你可以对我的答案发表评论
# 6 楼答案
有一个叫做^{} 的类,这是真的。但它在Java代码中不使用指针(因为Java没有指针,尽管我同意Java引用在概念上是类似的),大部分都是使用本机代码实现的
正如我在评论中提到的,这不是公共API的一部分,客户端代码不应该使用它。然而,当您查看the ^{} package 中
Atomic*
类的源代码时,您可以看到它的作用