【Java】数组

一维数组

数组的三种声明方式

1:元素类型[] 数组名 = {元素,元素,……};

int[] array = {1,2,3,4};
 
 2:元素类型[] 数组名 = new 元素类型[]{元素};
int[] array1 = new int[]{1,2,3,4};
 
3:元素类型[] 数组名 = new 元素类型[元素个数或长度];
数组名[下标数] = 元素;
int[] array2 = new int[2];


数组属于引用类型,数组元素属于对象;

// array叫做引用变量(引用),引用指向的是对象;

public static void main(String[] args) {
    int a = 1;
    int b = 2;
    int[] array = {1, 2, 3, 4};
    int[] array1 = new int[]{1, 2, 3, 4};
}
  1.  main方法在栈上开辟了一个栈帧,main方法中的局部变量在main方法上开辟了空间;
  2. 数组array和array是引用变量,里面存放的是引用所指向对象的地址,数组所指向的对象在堆上开辟空间;

【Java】数组_第1张图片


 内存空间划分

虚拟机栈:平时所说的栈、局部变量都是在虚拟机栈上开辟的;(当方法运行结束后,栈帧就被销毁了,即栈帧中保存的数据也被销毁了。)

堆:new创建的对象都是在堆上保存的;(堆是随着程序开始运行时而创建,随着程序的退出而销毁,堆中的数据只要还有在使用,就不会被销毁。)

方法区:常量、静态变量都是在方法区;

程序计数器:保存下一条执行指令的地址;

本地方法栈:(暂时不懂)

线程共享数据区:堆、方法区;


数组引用场景(重要)

  1. Java中传参数的方法中只有一个就是传值(地址也是一个值)
  2. 数组是引用变量(简称:引用),引用变量指向对象;引用变量中存放的是地址(地址是所指向对象的地址);
  3. 传一个基本类型:改变形参值不能改变实参值;
  4. 传一个引用类型:改变形参值可能改变实参值,不是传了引用就一定能改变实参的值;(改变指向地址不能改变实参,改变指向对象可以改变实参);

【Java】数组_第2张图片


 二维数组(int arr[行][列])

二维数组的定义

二维数组本质还是一个一维数组,二维数组中的元素就是一维数组;

Java中:二维数组在定义时可以省略列,不能省略行

C语言中:二维数组在定义时可以省略行,不能省略列;

Java中可以定义不规则的二维数组,定义想要的列数;

代码直观了解二维数组

public static void func(int[][] arr, int[][] arr1) {
        for (int[] array : arr) { // 冒号左边是引用所指向的对象,右边是引用对象
            System.out.println(array);
        }
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[i].length; j++) {
                System.out.println(arr1[i][j]);
            }
        }
    }
    public static void main(String[] args) {
        int[][] arr = {{1,2},{2,3}};
        int[][] arr1 = new int[2][]; // arr1就是一个不规则的二维数组
        arr1[0] = new int[]{10,20,30};
        arr1[1] = new int[4];
        func(arr,arr1);
    }

【Java】数组_第3张图片

你可能感兴趣的:(算法)