Java笔记——05.数组

这篇博客深入探讨了Java中的数组,包括数组的赋值机制,解释了基本类型赋值与数组赋值的区别。文章详细阐述了数组在栈和堆中的存储方式,并通过实例讲解了多维数组的工作原理。此外,还提到了需求分析的重要性,以杨辉三角为例,建议先简化问题,逐步实现功能。最后,介绍了二维数组的三种书写形式。
摘要由CSDN通过智能技术生成

05.数组


数组属于引用类型,数组型数据是对象

数组创建后,如果没有赋值,有默认值:byte[0],short[0],int[0],long[0],float[0.0],double[0.0],char[\u0000],boolean[false],String[null]


数组赋值机制

  • 基本数据类型赋值 ,这个值就是具体的数据,而且相互不影响(值拷贝)。
  • 数组在默认情况下是引用传递,赋的值是地址(地址拷贝)。

解析:

  • JVM的内存主要分三个区域:栈,堆,方法区。
  • 基本数据类型的数据放在中,例如int a = 1和int b = a就是在中开辟了两块空间来存放a和b具体的值,所以改变b并不会影响a的值。
  • 数组创建后,例如int[] arr1 = {…}和int[] arr1 = arr1其实是在中先开辟一块空间叫arr1,它存放的是地址,指向实际存储的具体数据,而这些数据存储在中,当arr1的值赋给arr2时,其实是将地址值赋给了arr2,所以arr2也指向了相同的堆中数据,所以通过arr2也可以改变arr1的值。(也就是说总共开辟了三块空间,栈中两个,堆中一个)

多维数组

int[][] arr = new int[2][3];
//arr[i]表示二维数组第i行的地址
//arr.length表示二维数组的宽度,即一维数组的个数
//arr[i].length表示二维数组每一行的元素的个数,即每个一维数组的长度

解析:

中开辟一块空间arr,存放的是地址,指向中的一处空间,这个空间存放的也是地址,也就是arr[0]和arr[1]。然后arr[0]指向中的另一处空间,这才是二维数组中第一个一维数组的具体的数值,同理,arr[1]也指向中的另一处空间,存放的是二维数组中第二个二维数组的具体的数值。(也就是说总共开辟了四块空间,栈中一个,堆中三个)


Java中多维数组可以列数不确定,即各个一维数组的长度可以相同也可以不相同

例题:杨辉三角

/*
        * 1
        * 1 1
        * 1 2 1
        * 1 3 3 1
        * 1 4 6 4 1
        * 1 5 10 10 5 1
        *
        *思路:化繁为简,先死后活
        * 
        * */

//首先,不管具体的数字,将这个三角形的形状先打印出来,经过观察我们可以发现,杨辉三角的每层数的个数和所在层数是相等的
//然后三角形的层数也先给它一个确定值,比如6层,根据多维数组可以列数不确定的特点,利用for循环,创建数组
int[][] arr = new int[6][];
for(int i = 0; i < arr.length; i++){
   
    arr[i] = new int[i + 1];
}

//当然我们可以写一个辅助for循环遍历数组,查看当前的效果
for(int i = 0; i < arr.length; i++){
   
    for(int j = 0;j < arr[i].length; j++){
   
        System.out.print(arr[i][j]</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值