java的引用是不是c语言的指针?

SilentHunter460 2019-11-09 11:21:17
我总觉得引用就是指针。下图的理解是否正确?

...全文
569 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
许润清 2020-01-06
  • 打赏
  • 举报
回复
可以理解为指针
L_vampire 2020-01-03
  • 打赏
  • 举报
回复
引用有时不止存对象地址,还可能是地址的地址。
SilentHunter460 2019-12-27
  • 打赏
  • 举报
回复
加分继续求解答。
qq_39936465 2019-12-27
  • 打赏
  • 举报
回复
引用 楼主 qq_16774199 的回复:
我总觉得引用就是指针。下图的理解是否正确?
谈谈个人理解,首先引用和指针都可以理解为对地址的操作,某些时候这2个可以理解为一致。但是个人觉得指针可以对一段地址进行操作,而引用应该是一个地址点。引用无法对地址进行加减操作,这样会识别不了地址内容,但是指针是可以进行加减操作的。这是存储方式的不同而造成的。
stacksoverflow 2019-12-27
  • 打赏
  • 举报
回复
C/C++中指针类型,存储的是实际内存地址,也就是你可以拿到实际的内存地址并进行偏移操作。 Java的引用类型,可以理解为存储的事虚拟机的堆内存地址,一个虚拟的地址,并且不允许你做偏移操作。 相同点是你可以把这个地址传来传去,不同点的话, C/C++里拿到内存地址,你有N种方法对他进行偏移,计算。 但Java里只有下面的固定格式,因为你拿到的是虚拟的地址,真正管理由Java虚拟机负责。 在java对象的话通过a.b的方式拿到a的地址,访问b元素。数组的话a[i],拿到a的地址,访问第i各元素 这也是Java程序安全,但性能略有损耗,C/C++程序性能高效,但不安全的原因。
活在梦里吗 2019-12-27
  • 打赏
  • 举报
回复
可以理解为指针,没啥问题
qybao 2019-11-10
  • 打赏
  • 举报
回复
不是,引用是引用,指针是指针,c里也有引用,但和java的引用也不尽相同。 从内存模型的角度来说,图的理解基本正确,只是number是在本地栈里,number的内存里存的是堆内存double[5]数组对象的首地址 java没有指针,而且为了安全也不允许有指针。 指针允许地址偏移计算,如number+5,对应于number[5],很显然java的引用不行
hurtCat 2019-11-10
  • 打赏
  • 举报
回复
JDK1.2之前引用的定义为如果reference类型的数据中存储的数值代表的是另一块内存的起始地址,就称这块内存代表一个引用。 在我看来就是指针
SilentHunter460 2019-11-10
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
不是,引用是引用,指针是指针,c里也有引用,但和java的引用也不尽相同。 从内存模型的角度来说,图的理解基本正确,只是number是在本地栈里,number的内存里存的是堆内存double[5]数组对象的首地址 java没有指针,而且为了安全也不允许有指针。 指针允许地址偏移计算,如number+5,对应于number[5],很显然java的引用不行
number+5指针越位了吧,本例最多number+4。
SilentHunter460 2019-11-10
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
不是,引用是引用,指针是指针,c里也有引用,但和java的引用也不尽相同。 从内存模型的角度来说,图的理解基本正确,只是number是在本地栈里,number的内存里存的是堆内存double[5]数组对象的首地址 java没有指针,而且为了安全也不允许有指针。 指针允许地址偏移计算,如number+5,对应于number[5],很显然java的引用不行
我重做了一个图,应该与你的解释更加接近,请看是不是更合理?

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧