返回信息流在 Java 中,限制对指针的使用也是保证程序安全可靠的重要原因之一。Java 规定一
切对内存的访问都必须通过对象的实例变量来实现,实例变量中的内容其实就是指针,只
不过 Java 不允许程序员对其进行删除和计算,
这样一来就可以避免从外部在未授权的情况
下访问对象的私有成员,也可以避免由于对指针的错误操作而引起的不必要的麻烦。
在一本书上看的,刚学java,理解不了,请大家帮忙指点一下,感谢
这是一条镜像帖。来源:北邮人论坛 / java / #25195同步于 2013/5/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问题]实例变量中的内容其实就是指针 ?
gl5
2013/5/10镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
http://www.ibm.com/developerworks/cn/java/l-jpointer/
【 在 gl5 (暗星) 的大作中提到: 】
: 在 Java 中,限制对指针的使用也是保证程序安全可靠的重要原因之一。Java 规定一
: 切对内存的访问都必须通过对象的实例变量来实现,实例变量中的内容其实就是指针,只
: 不过 Java 不允许程序员对其进行删除和计算,
: ...................
Java使用“引用”而不是“指针”,也不允许像C++那样手动delete。避免了“无用单元”和“悬垂指针”。
【 在 gl5 的大作中提到: 】
: 在 Java 中,限制对指针的使用也是保证程序安全可靠的重要原因之一。Java 规定一
: 切对内存的访问都必须通过对象的实例变量来实现,实例变量中的内容其实就是指针,只
: 不过 Java 不允许程序员对其进行删除和计算,
: ...................
对象存在java堆里面,然后,你所使用的是对这个对象的引用,是在java栈里面。与指针不同的是,当对象没有与GC root相连的链,就可以JVM自动回收,这样就不会出现C++里面的一些指针问题。
其实java里面的“引用”就是c++里面的“指针”,不同之处是java里面的“指针”不允许进行指针运算。
【 在 nuanyangyang 的大作中提到: 】
: Java使用“引用”而不是“指针”,也不允许像C++那样手动delete。避免了“无用单元”和“悬垂指针”。
:
Java要保证当对象移动了(因为垃圾回收要整理内存碎片),这个对象的所有引用都仍然要指向该对象。
C的指针只是内存地址。显然malloc出来的东西是不能移动的。
所以引用会永远有效,而指针不会。我曾经因为混淆引用和指针被导师批评过。
【 在 hotcode 的大作中提到: 】
: 其实java里面的“引用”就是c++里面的“指针”,不同之处是java里面的“指针”不允许进行指针运算。
:
首先引用及指针变量所保存的内容都是引用对象的地址,他们都是用来定位引用的实例对象的,它们本质是一样的。只是在java中对引用做了一些限制,但是就不能因此说它们不是一回事;就像是笼子外面的狗跟关在笼子里的狗一样,外面的狗可以自由走动,笼子里的狗只能在笼子里蹲着,但是你不能说笼子里的不是狗。。。
其次,实例对象是否可以移动的问题,只是jvm回收垃圾策略的需要而已,jvm同样可以实现为不移动对象。这点并不能拿来否定java中的引用就是C++中的指针;
最后,C++中的引用跟指针确实不是一回事,混淆了当然要批评。但是java中的引用跟c++中的引用不是一回事。
以上只是我个人的理解,并不是从什么书或资料中看到的。所以可能会有误。欢迎指正。
【 在 nuanyangyang 的大作中提到: 】
: Java要保证当对象移动了(因为垃圾回收要整理内存碎片),这个对象的所有引用都仍然要指向该对象。
: C的指针只是内存地址。显然malloc出来的东西是不能移动的。
: 所以引用会永远有效,而指针不会。我曾经因为混淆引用和指针被导师批评过。
: ...................