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

本文探讨Java数组的创建、引用概念及其在字符串数组中的特殊表现。通过实例展示了数组引用的变化,并解释了为何在操作过程中地址和长度会改变,强调字符串数组本质是字符数组的引用类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组的新建

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值