其实不要指针的原因是多方面的,其中一个比较重要的是为了在内存托管机制下减少堆内存碎片——在大多数现代高级语言中,只要是有垃圾回收机制的,都不会提供指针。在堆中分配的内存通常都是零散的(这也是为什么这种内存区域叫“堆”,顾名思义,没有次序的一堆),会导致堆内存中产生很多碎片,而当对象被垃圾回收后,GC 就会紧缩内存,整理碎片,这样才能提高分配堆内存的效率(因为分配堆内存需要在“杂乱的一堆”中找到一块足够大的连续空间)。这样一来,就需要把内存中的对象移来移去,自然指向这个对象的引用的地址也会改变。由于所有该对象的引用在底层都是指向同一个指针(而这个对象唯一的指针又指向该对象),所以只需要改变这个指针的值,就能改变所有引用指向的值。但这在 C++ 中却是不可能的,因为 C++ 可以操纵任意数量的指针指向任意地址
除此之外还有其它原因,比如安全性:有指针就有可能导致内存泄漏,崩溃,访问不可访问、释放已被释放的地址而导致段错误等,引用则不会出现这些问题