【JAVA数组的定义与使用】(一)

博主头像

🌠个人主页 : @赶路人- -
🌌个人格言 :

要努力成为梧桐,让喜鹊在这里栖息。
要努力成为大海,让百川在这里聚积。

file,n.文件;v.保存文件 [faɪl] command,n.命令,指令 [kəˈmænd]

1.数组的基本用法

1.1 什么是数组

在 Java 中,数组是一种用于存储相同类型数据元素的数据结构。数组是固定大小的,一旦创建,其大小就无法更改。

1.2 创建数组

// 动态初始化
数据类型[] 数组名称 = new 数据类型 [申请元素个数];
数据类型[] 数组名称 = new 数据类型 [] { 初始化数据 };

// 静态初始化
数据类型[] 数组名称 = { 初始化数据 };

//示例
int[] a = new int[10];
//最后元素下标为9

char[] a = new char[]{'a', 'b', 'c'};

double[] a = {1.1, 1.2, 1.3};

注意事项:
静态初始化的时候, 数组元素个数和初始化数据的格式是一致的.

1.3数组的使用

获取数组长度&访问元素

int[] arr = {1, 2, 3};
// 获取数组长度
System.out.println("length: " + arr.length); // 执行结果: 3

// 访问数组中的元素
System.out.println(arr[1]); // 执行结果: 2
System.out.println(arr[0]); // 执行结果: 1
arr[2] = 100;
System.out.println(arr[2]); // 执行结果: 100
  1. 使用 arr.length 能够获取到数组的长度. . 这个操作为成员访问操作符. 后面在面向对象中会经常用到
  2. 使用 [ ] 按下标取数组元素. 需要注意, 下标从 0 开始计数
  3. 使用 [ ] 操作既能读取数据, 也能修改数据
  4. 下标访问操作不能超出有效范围 [0, length - 1] , 如果超出有效范围, 会出现下标越界异常

2.数组作为方法的参数

2.1基本用法

打印数组内容

public static void main(String[] args){
	int[] arr = {1,2,3};
	printArray(arr);
}
public static void printArray(int[] a){
	for(int x: a){
		System.out.println(x);
	}
}
//执行结果
1
2
3

在上面的代码中,int[ ] a 是函数的形参 ,int[ ] arr 是函数的实参。
如果需要获取数组的长度可以使用 数组名.length

2.2理解引用类型(重点/难点)

参数传内置类型

public static void main(String[] args){
	int num = 0;
	fun(num);
	System.out.println("num = " + num);
}

public static void func(int x){
	x = 10;
	System.out.println("x =" + x);
}
//执行结果
x = 10
num = 0

可以发现,改变形参x的值,不会改变实参num的值。
因为形参是在内存中新申请的一个空间,和实参不在一个空间。
在这里插入图片描述

参数传数组类型

public static void main(String[] args){
	int[] arr = {1,2,3};
	fun(arr);
	System.out.println("arr[0]" + arr[0]);
}
public static void fun(int[] a){
	a[0] = 100;
	System.out.println("a[0]" + a[0]);
}

//执行结果
a[0] = 100
arr[0] =100

我们发现, 在函数内部修改数组内容, 函数外部也发生改变.
此时数组名 arr 是一个 “引用” . 当传参的时候, 是按照引用传参.

在这里插入图片描述

2.3java栈与堆

虚拟机栈 和 堆
在这里插入图片描述

  • 局部变量和引用保存在栈上, new 出的对象保存在堆上.
  • 堆的空间非常大, 栈的空间比较小.
  • 堆是整个 JVM 共享一个, 而栈每个线程具有一份(一个 Java 程序中可能存在多个栈).

3.数组作为方法的返回值

写一个方法, 将数组中的每个元素都 * 2

public static void main(String[] args){
	int[] arr = {1,2,3};
	transform(arr);
}
public static void transform(int[] arr){
	for(int i = 0; i < arr.length;i++){
		arr[i] = arr[i] * 2	//arr[i] *= 2;
	}
}

上述代码固然可行,但是修改了原来的数组,有时候我们不想改动原来数组,可以在方法内部创建一个新的数组,并由方法返回出来。

public static void main(String[] args){
	int[] arr = {1,2,3};
	int[] output = transform(arr);
}
public static int[] transform(int[] arr){
	int[] ret = new int[arr.length];
	for(int i = 0; i < arr.length;i++){
		ret[i] = arr[i] * 2;
	}
	return ret;
}

这样就不会修改到原来的数组。
此外数组是引用类型, 返回的时候只是将这个数组的首地址返回给函数调用者, 没有拷贝数组内容, 从而比较高效。

  • 28
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值