首页 > 其他分享 >数组补充

数组补充

时间:2023-06-26 22:33:51浏览次数:40  
标签:补充 元素 +-----+ 对象 内存 数组 array

声明数组是在栈里//int[] array=null;

创建数组是在堆里//arry=new int[10];

在Java中,数组是一种引用类型。创建一个数组时,需要分配内存来存储数组元素。

假设我们要创建一个包含3个整数的数组:

int[] array = new int[3];

上述代码将在内存中创建一个名为 array 的变量来引用数组对象。数组对象本身是在堆(Heap)上分配的。

内存示意图如下所示:

          +-----+
array --> |     |
        +-----+

此时,数组还没有被初始化,每个元素的值都为默认值(0)。在堆上将为数组分配连续的内存空间,可以通过下标访问数组元素。

接下来,我们为数组的每个元素赋值:

java复制代码array[0] = 10;
array[1] = 20;
array[2] = 30;

内存示意图更新如下:

          +-----+
array --> | * |
        +-----+
          |10 |
        +-----+
          |20 |
        +-----+
          |30 |
        +-----+

现在,数组的每个元素都有了具体的值。

请注意,数组的索引从0开始,因此 array[0] 表示第一个元素, array[1] 表示第二个元素,以此类推。

当我们使用数组时,可以通过数组名和索引访问特定的元素。例如,array[1] 的值为20。

需要注意的是,数组的内存分配是连续的,这意味着所有元素都存储在相邻的内存位置上。这也使得通过索引访问元素的操作效率较高。

在Java中,声明一个数组变量时,变量本身(即引用)存储在栈内存中。例如,int[] array = null; 中的 array 变量存储在栈内存中。此时,array 变量还没有指向任何有效的数组对象,因此它被初始化为 null

接下来,当我们使用 new 关键字创建一个具体大小的数组时,数组对象将在堆内存中动态分配。

例如,array = new int[10]; 将在堆内存中分配一个包含10个整数的数组对象,并将 array 变量指向该数组对象。

内存示意图如下所示:

          +-----+
array --> |     |
         +-----+
          ...
         +------+
array --> |  *   |
         +------+
           |0   |
         +------+
           |0   |
         +------+
            ...
         +------+
           |0   |
         +------+

现在,array 变量指向新创建的数组对象,数组的每个元素都被初始化为默认值(在这种情况下为0)。

需要注意的是,在 Java 中,基本类型数组(如 int[])和对象数组(如 String[])的工作原理是相同的。它们都在堆内存中进行动态分配。

数组的四个基本特点

数组的长度是确定的,数组一旦被创建,它的大小就是不可以改变的。

其元素必须是相同类型,不允许出现混合类型。

数组中的元素可以是任何数据类型,包括基本类型和引用类型。

数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。

数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

  1. 数组的长度是确定的,并且一旦创建后,其长度是不可改变的。在创建数组时需要指定其长度,然后无法动态调整数组的大小。

  2. 数组中的元素必须是相同的类型,不允许出现混合类型。例如,创建一个整数数组,其中的每个元素都必须是整数类型。

  3. 数组中的元素可以是任何数据类型,可以是基本类型(如整数、浮点数等)或引用类型(如对象、字符串等)。

  4. 数组变量是引用类型,它指向堆内存中的数组对象。因此,数组本身是在堆内存中创建和存储的。

标签:补充,元素,+-----+,对象,内存,数组,array
From: https://www.cnblogs.com/ptm2/p/17507286.html

相关文章

  • 08异步短信发送,注册功能,补充【1.为什么要写media才能访问,2.debug作用,3.ALLOWED_HOSTS
    1异步发送短信#原来的发送短信,是同步 -前端输入手机号---》点击发送短信---》前端发送ajax请求----》到咱们后端接口---》取出手机号----》调用腾讯发送短信---》腾讯去发短信---》发完后----》回复给我们后端发送成功---》我们后端收到发送成功---》给我们前端返回发送成功......
  • WPF 入门笔记 - 04 - 数据绑定 - 补充内容:资源基础
    宇宙很大,生活更大,也许以后还有缘相见。--三体......
  • 数组的三种初始化方式
    数组的三种初始化方式1.静态初始化int[]a={1,2,3};Mansmans={newMan(1,1),newMan(2,2)};2.动态初始化int[]b=newint[10];b[0]=1;b[1]=2;3.默认初始化数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的......
  • java递归,数组
    递归在Java中,递归是一种方法或函数调用自身的技术。使用递归可以解决那些可以被分解成相同问题的子问题的情况。以下是有关使用递归的一些基本信息:递归的基本原理:找到问题的基本情况(递归终止条件)。找到问题的规模减少的方式,将其转化为更小的子问题。通过调用自身来解......
  • 34. 在排序数组中查找元素的第一个和最后一个位置
    给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1,-1]。你必须设计并实现时间复杂度为O(logn)的算法解决此问题。示例1:输入:nums=[5,7,7,8,8,10],target=......
  • 2023-06-26:在大小为 n x n 的网格 grid 上,每个单元格都有一盏灯,最初灯都处于 关闭 状
    2023-06-26:在大小为nxn的网格grid上,每个单元格都有一盏灯,最初灯都处于关闭状态给你一个由灯的位置组成的二维数组lamps其中lamps[i]=[rowi,coli]表示打开位于grid[rowi][coli]的灯即便同一盏灯可能在lamps中多次列出,不会影响这盏灯处于打开状态当一盏灯处于......
  • 724. 寻找数组的中心下标
    给你一个整数数组nums,请计算数组的中心下标。数组中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为0,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个......
  • leetcode-前缀和数组&差分数组
    前缀和数组:前缀和技巧适用于快速、频繁地计算一个索引区间内的元素之和。(仅仅适用于原数组不变的情况,如果原数组经常修改,则需要考虑差分数组。)模版如下:classPrefixSum{//前缀和数组privateint[]preSum;/*输入一个数组,构造前缀和*/publicPrefixSu......
  • console.log 弊端-数组有值但是打印出来空值
    情况:数组有对象但是length为0原因:该数组原本有值,但是被数组操作api改变了数组,打印出来的值是已经被操作的数组 ......
  • 获取数组对象中的某一属性值
    如果想要获取到arr数组对象中key为name的属性,需要用到引号letarr=[{name:'1',prop:'123'},{name:'2',prop:'111'}]arr.forEach(item=>{console.log('123',item['name'])})......