Java的数组与C的数组工作原理相同,但是使用起来大相径庭,让我们来探讨下。
目录
一、数组的定义
Java数组有三种定义方式,如下:
int[] a = {1,2,3,4,5};//用的最多
int[] a1 = new int[3];
int[] a2 = new int[]{1,2,3,4,5};
第一种用的最多,区别于C语言,Java认为 ' int[] '是一个类型
所以 ' int[5] a ' 这种写法是错误的。
这里的 'new' 是Java的一个关键字,数组是引用类型,所以使用数组相当于new了一个对象。
二、数组的使用
数组长度
在Java中很简单就能表示数组的长度,只要在数组名后面加一个 ‘.length’ 即可。
System.out.println(array.length);
数组遍历
在Java中有三种遍历数组的方式。
第一种 普通方式
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
第二种 增强for循环
这也算Java中一个for循环的特殊用法。
for (int x : a) {
System.out.print(x + " ");
}
增强for循环就是将数组中的元素一个一个放入所定义的变量 x 内
与普通循环的区别是:
增强for循环只获取数组的内容,它不能获取数组的下标,不能增删改数组内容。
第三种 借助Java的操作数组的工具类 Arrays.toString
这个本质就是将数组变为一个字符串,然后再打印。
System.out.println(Arrays.toString(a));
三、引用类型的理解
先来看一道引例:
public static void func1(int x) {
x = 10;
}
public static void func2(int[] a) {
a[0] = 10;
}
public static void main(String[] args) {
int[] arr = {1, 2, 3};
int num = 0;
func1(num);
func2(arr);
System.out.println("num = " + num);
System.out.println("arr[0] = " + arr[0]);
}
结果如下:
func1没有将 int 类型的 num 改变,但是 func2 改变了数组中的值。
对于func1来说,在方法内定义了一个新的临时变量,这个临时变量有自己的地址
由于传值调用,所以不会改变原来的值。
对于func2来说,数组是引用类型,在传参时,是按照引用传参。
下面画图演示引用传参:
比如定义数组
int[] arr = {1, 2, 3};
在栈上会开辟一块空间放数组名与地址,通过地址去堆中找数组内容。
在栈上引用,指向堆中的对象。
如果,此时将arr传参给func2
那么他就会将地址传给参数,也就相当于传址,传址就可以改变数组内容了。
这里还有一个注意点,引用是不能指向多个对象的。
public static void main(String[] args) {
int[] a = {1,2,3,4,5};
a = new int[3];
a = new int[5];
}
比如这种写法是错误的,就像一个人怎么能同时有好几个对象呢??
Java中的null
不同于C语言的NULL,在Java中是纯小写的。
它也是表示空指针。
在Java中,这样的写法是错误的,会抛出空指针异常。
public static void main(String[] args) {
int[] arr = null;
System.out.println(arr[0]);
}
感谢你能看到这,如有帮助,欢迎点赞👍。