Java数组基础笔记(引用、字符串数组)

文章目录

    • 数组的新建
    • 数组的引用概念
    • 字符串数组引用的奇妙

数组的新建

数组的新建有多种方式,需要注意返回值类型是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

为什么地址和长度都发生了改变呢?

中间到底发生了什么呢?

Java数组基础笔记(引用、字符串数组)_第1张图片

字符串数组引用的奇妙

理解一段代码

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

为什么两个会不一样呢?

Java数组基础笔记(引用、字符串数组)_第2张图片

说明在执行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

你可能感兴趣的:(JAVA学习笔记)