Joa*_*uer 38
这里的术语非常模糊.
Java支持它所谓的"引用".引用行为 很多像指针在C/C++ -喜欢的语言.他们不会采取同样的方式"引用",在这些语言的工作.
C中的指针与Java中的引用之间的主要区别是:
对于指针的某些用途,这没有实际效果(例如链接列表在两种语言中的工作方式几乎相同),对于其他用途,差异非常大(C中的数组只是花哨的指针算术,在Java中它们的工作方式完全不同).
因此,在某种程度上,Java引用可以称为"受限指针".
...一种编程语言数据类型,其值直接指向(或"指向")另一个值
强调我的.根据这个严格的定义,Java没有指针.
更一般的引用是指针的超类,但也包含更多抽象的东西,如文件句柄甚至URL.
Java和C/C++之间的另一个重要区别是引用是对象的索引.而在C/C++中,指针是内存中的地址.
在32位JVM中,它们是相同的,但是在64位JVM中它们不是.你会注意到这个区别是,对于小于32 GB的堆大小,引用仍然是32位(即使在64位JVM中)这是因为对象是在8字节边界上分配的,所以索引可以参考up至32 GB内存(4 G*8字节)
在64位C/C++程序中,指针需要能够引用每个字节,即使存储器分配在16字节边界上,因此它的大小为64位(从技术上讲,它应该可以使其为32-位小于4 GB的内存.)
甲智能指针需要两个底层指针(总共16个字节),但是,GCC,用于参考计数的最小分配大小为32个字节(然后您有指向该对象的尺寸)的总大小为32个字节每个指针+ 16个字节.在Java中每个引用的4个字节.(如果你有32+ GB的堆,则为8个字节)
总之,Java引用不必是实际地址,甚至不必是指针.它肯定比智能指针小得多.
| 归档时间: | 
 | 
| 查看次数: | 16690 次 | 
| 最近记录: |