1.一维数组
在这里java中的一维数组和c语言的一维数组,有很大的相同之处,但也有很多不同之处,这里主要就是说说他们的不同之处。
1.首先是关于定义放面。
在c语言中,定义一个整型数组是 int arr[5] = {1,2,3,4,5}; 这样定义的,这样定义是不是很笼统啊。
而在java中,定义一个整型数组是 int[] arr = {1,2,3,4,5}; 这样定义的,从这里我们可以准确的看出
这里是什么类型,int[] 就是他的类型嘛,而c语言中不符合这样,所以java更能充分展示这一点。
public class Main {
public static void main(String[] args) {
int[] arr1 = {1,2,3,4,5};//第一种是直接进行赋值,自动分配了空间的大小。
int[] arr2 = new int[5];//第二种是直接定义了,一个空间大小为5个整型的空间的大小,并自动初始化为0。
int[] arr3 = new int[]{1,2,3,4,5};//第三种和第一种其实一样,是第一种的简化。
}
}
如图代码展示的3种定义方法。
2.第二呢,我们来说说他们在内存上的存储。
c语言我们在存储数组是直接用栈来存储的,数组名表示他们的首元素地址,我们可以通过指针来进行访问。
在java中区别可就大了,Java中定义一个整型的数组,比如:int[] arr = {1,2,3,4,5}; 这里arr会被定义到堆中,而里面的元素的地址会被存到栈中,arr指向栈中他们的地址,因此在java中数组是引用变量类型。
图解:
那我们想一个问题那如果我们在对数组传参的时候,改变参数会不会改变其本身呢?
例如:
import java.util.Arrays;
public class Main {
public static void func(int[] arr2){
for(int i = 0; i < arr2.length; i++){
arr2[i] = arr2[i] + 1;
}
System.out.print(Arrays.toString(arr2));
}
public static void main(String[] args) {
int[] arr1 = {1,2,3,4,5};
func(arr1);
System.out.println();
System.out.print(Arrays.toString(arr1));
}
}
这个例子小伙伴们可以思考一下打印出来的结果是多少。
结果如下:
图解分析:
这里传的都是引用变量类型,如图所示传的形参产生的地址和原参数一样,因此会改变内部的值。
但是也不是传了引用,就一定能改变实参的值,要看形参干了什么。
还有上面代码中使用了一个方法 Arrays.toString(),这个方法会将数组转换成字符串。
2.二维数组
二维数组其实是一种特殊的一维数组,在定义的时候不能省略行,而c语言不能省略列,
那怎么定义的呢。
如下代码:
public class Main {
public static void main(String[] args) {
int[][] arr1 = {{1,2,3},{4,5,6}};
int[][] arr2 = new int[][]{{1,2,3},{4,5,6}};
int[][] arr3 = new int[2][3];//默认初始化为0。
}
}
这是定义的三种格式。
关于二维数组的内存储存格式;例如定义一个 int[][] array = {{1,2,3},{4,5,6}};
如图:
这里array[0] 就是指向栈区的0X98 array[1]指向栈区的0X78。
array[0]是在堆区的,在这里对比c语言,c语言是使用指针访问下标来实现。
这里的array[] 就是存放地址的。
如代码:
public class Main {
public static void main(String[] args) {
int[][] arr = new int[2][3];
System.out.println(arr[0]);
}
}
这里一维数组和二维数组基本就介绍完了,
感谢大家学习我的博客。