1. 指针在运行时可以改变其所指向的值(改变地址),即指向其它变量;而引用一旦和某 个对象绑定后就不能再改变,总是指向最初的对象
  2. 程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名以及变量所 对应的地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表 上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指 向的对象(指针变量中的值可以改),而引用对象不能改
  3. 引用的值为地址的数据元素,Java 封装了地址,可以转成字符串查看,长度可以不必关 心;C 指针是一个装地址的变量,长度一般是计算机字长,可以认为是个 int
  4. 引用声明时没有实体,不占空间;C 指针如果声明后会用到才会赋值,如果用不到不会 分配内存
  5. 引用的使用权限比较小,不会产生内存溢出。C 指针是容易产生内存溢出的,所以程序 员需小心使用、及时回收

Java 中的引用其实就是封装过的指针,不可更改指向的对象且由 JVM 负责回收,其底层实 现依然是依赖指针的