二维数组
二维数组简单来说就是一个由行和列组成的一个表格,也就是数学中的矩阵。我们在这个矩阵中访问元素的话,是根据元素的行角标和列角标所确定的。
那么具体是在内存中如何存储的呢?
无论是二维数组,还是多维数组,其实它们本身就是一个一维数组;尤其对于二维数组而言,无非就是一个一维数组,只不过该一维数组中的每一个元素是另一个一维数组罢了!
二维数组:二维数组行列组成的表格,格子中内容就是二维数组的元素。
二位数组存储:依旧是在堆内存 ,二维数组就是多个一维数组组成
创建二维数组:
int[][] matrix=new int[3][4]; 创建一个3行4列的二维数组,元素默认都是0
int[][] matrix=new int[][]{
{1,2,3,4} ,
{5,6,7,8} ,
{9,10,11,12}
};
创建个指定元素的二维数组
int[][] matrix={
{1,2,3,4} ,
{5,6,7,8} ,
{9,10,11,12}
};
锯齿矩阵/二维数组
int[][] matrix={
{1,2,3,4} ,
{5,6,7} ,
{8,9},
{10}
};
特别的,如果一个二维数组的行和列相等的话,也称之为是方阵
示例:
class Test01{
public static void main(String[] args){
int[][] matrix={
{1,2,3,4},
{5,6,7,8},
{8,7,6,5},
{4,3,2,1}
};
//matrix.length 表示的就是最外层那个一维数组的长度 行数
//matrix[i] 表示的是最外层那个一维数组当中角标i的那个元素 只不过这个元素也是一个一维数组
//matrix[i].length 表示的是这个一维数组元素的长度(当前行的长度)
//matrix[i][j] 表示的就是这个一维数组元素中角标j的那个元素
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[i].length;j++){
System.out.print(matrix[i][j]+" ");
}
System.out.println();
}
//int[][] matrix=new int[m][n]; 这个二维数组定义下
//内存中一共有几个一维数组 m+1
}
}
基本数据类型与引用数据类型(区别)
基本数据类型传参—— 传的是常量在常量池中的地址;引用数据类型传参—— 传的是对象在堆内存中的地址。
强调一点:实参—>形参 传的永远是地址。
基本数据类型:是原子型数据 ,也就是说不可再拆分;
引用数据类型:是复合型数据 ,也就是在当前对象数据中,还包括了其他更多的子数据。
例如: int a,b,c;-> arr [a,b,c] 人:姓名 年龄 性别 身高 体重....复合型数据 : 指的就是由多个基本数据或其他引用数据组成的一个数据。
形参变量永远不可能去改变实参中已储存的数据地址 ,除非return 实参且接收, 就算形参变量所存储的数据地址被改变 ,那也是改变形参自己与实参无关。
无非是:
实参本身指向的是一个对象, 然后把这个对象的地址传递给了形参;形参就可以通过该地址去堆内存中找对象,可以修改对象中的数据;实参再去访问对象时,对象中的数据就已经被改变; 因为实参和形参目前使用操作的都是同一个对象总结:
无论实参还是形参, 实参就是把变量空间所存的地址给了形参而已; 他们都是变量! 所以对于变量的修改而言,主要分两种!
1.要么改变该变量空间所存储的地址
int a=3;
a=7;
int[] arr=new int[]{1,2,3};
arr=new int[]{3,2,1};2.要么改变该变量空间所存储的地址所指向的那个对象中的数据
int[] arr=new int[]{1,2,3};
arr[0]=10;