Java中内存地址是什么?物理连续和逻辑连续分别是什么?有什么区别及实际应用场景?

一、首先我们了解一下什么是内存地址??

在Java中,内存地址是指对象在计算机内存中的位置,用于唯一标识对象在内存中的存储位置。每个Java对象在运行时都会被分配在Java堆中,Java堆是一块运行时数据区,用于存储所有的对象实例。每个对象在Java堆中都有一个唯一的内存地址,可以通过Java引用来访问该地址

举个例子大家就看懂了。

int[] arr = {1,2,3,4,5}

其中arr称为对象引用,{1,2,3,4,5}称为对象,它有个首地址,arr指向了(代表了)对象的首地址才能访问该对象。可以将其类比为房子和门牌号的关系。在这个比喻中,房子代表内存中的对象,而门牌号则代表对象引用

在Java中,内存地址的单位是字节(Byte)。每个字节由8个位(Bit)组成,每个位可以表示0或1,因此一个字节可以表示256(2的8次方)个不同的值。

二、物理上连续是什么意思?

首先说一下,我们数组根据下标获取元素的根本都是根据元素的首地址去获取的,而不是下标,下标只是用来根据特定的公式直接计算出当前下标元素的首地址,从而取出元素。

物理上连续是指每个数组里面的元素的地址都是连续的,例如:直接上图

假设我们有个int[] array = {1,2,3,4};内存表示如图

首先我们所说的连续,都是指元素首地址连不连续,假设第一个元素的首地址为0x1000,那接着经历了元素1之后下一个元素的首地址是0x1004,为什么是0x1004,因为每个元素都占用4个字节。这里其实是有个公式的y=ax+b;其中a代表数组的下标,x代表数据类型所占的字节数,b代表整个数组的首地址

整型数组刚好是4个字节,所以元素1的首地址经历了4个字节正好变成了元素2的首地址0x1004,刚好衔接上,后续元素也是如此,所以说是物理上连续。

物理上连续它是有下标的概念的,你看刚才我们公式里面是不是有下标,当我们根据下标去查找元素的时候,实际上是根据公式找到元素的地址,然后根据元素的首地址取出元素的。

 当然有了下标自然就可以快速找到元素的首地址!!!!!!!!!!!!!!!

三、逻辑上连续是什么意思?

当然我们可想而知,那肯定是物理地址不连续,但是我们逻辑上能够用一定手段让它连续,就比如链表这种的成为逻辑上连续,物理上不连续。内存中一般就是分布比较散。如图,p1p2p3三个对象,通过指针这个介质让它们连续起来,其实中间是空开的,也没有什么下标的概念。就如我们学的双链表这种。

链表得如何访问大家应该都知道,它不是通过数组下标来访问的,因为它不像数组那样通过公式将下标带入能求出当前下标对应的地址,而链表它的元素的首地址都是没有规律的,没有公式,也就没有下标的概念(要下标也没什么用),它是通过指针进行访问元素的。双链表我这里就不展开详解了,大家知道是这种的就是物理上不连续,逻辑上连续就行了!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值