数组的新建有多种方式,需要注意返回值类型是int[]
,新建方式如下几种:
int[] ns;
ns = new int[] {10,20,30,40,50};
int[] ns = new int[5];
int[] ns = new int[]{10,20,30,40,50};
int[] ns = {10,20,30,40,50};
小练习
public class Students {
public static void main(String[] args) {
System.out.println("Hello students!");
// 1,最标准的数组新建方式,一开始就确定好数组长度
// int[] ns = new int[5];
// 2,在新建数组的时候进行初始化操作,使用new分配内存
// int[] ns = new int[] {10,20,30,40,50};
// 3,像普通变量以一样,还可以采取这种方式进行初始化
int[] ns = {11,22,33,44,55};
// 可以直接使用下标对数组进行赋值,或者提取值
ns[0] = 46;
System.out.println(ns[1]);
// 打印数组的长度
System.out.println(ns.length);
// 如果索引超出数组范围,会报错
// System.out.println(ns[5]);
}
}
public class Students {
public static void main(String[] args) {
// 1,首先让ns指向一个长度为5的数组
int[] ns = new int[] {1,2,3,4,5};
// 打印数组的地址并遍历数组
System.out.println("address is "+ns);
for (int i=0;i<ns.length;i++)
{
System.out.println(ns[i]);
}
// 2,然后让ns指向一个长度为3的数组
// 下面这种写法是错的,因为ns已经定义过了
// int[] ns = new int[] {1,2,3};
ns = new int[] {11,22,33};
System.out.println("address is "+ns);
for (int i=0;i<ns.length;i++)
{
System.out.println(ns[i]);
}
}
}
实际输出为:
address is [I@60215eee
1
2
3
4
5
address is [I@4ca8195f
11
22
33
为什么地址和长度都发生了改变呢?
中间到底发生了什么呢?
理解一段代码
public class Students {
public static void main(String[] args) {
// 新建一个字符串类型的数组
String[] names = {"ABC","XYZ","zoo"};
// 新建一个字符串,指向字符串数组种的某一个字符串
String s = names[1];
names[1] = "cat";
// 上面两步到底发生了什么?
System.out.println("s="+s);
System.out.println("names[1]="+names[1]);
}
}
输出结果为:
s=XYZ
names[1]=cat
为什么两个会不一样呢?
说明在执行String[] names = {"ABC","XYZ","zoo"}
语句的时候,系统分配了三个引用变量,分别为
string names[1],names[2],names[3]
随后s
跟随names[1]
指向了“XYZ”,而names[1]
又指向了新的“cat”。
再次说明字符串本质上也是一种数组引用类型,只是数组里面存放的格式是string
格式,而非int
格式。
参考文章:
https://www.liaoxuefeng.com/wiki/1252599548343744/1255941599809248