Java学习笔记 --- 数组的赋值机制

一、数组的赋值机制

1.基本数据类型赋值,这个值就是具体的数据,而且相互不影响

2.数组在默认情况下是引用传递,赋的值是地址

public class ArrayAssign {
	public static void main(String[] args) {
		// 基本数据类型赋值,赋值方式位值拷贝
		int n1 = 10;
		int n2 - n1;
		n2 = 80;
		System.out.println("n1=" + n1);//10
		System.out.println("n2=" + n2);//80

		// 数组在默认情况下是引用传递,赋的值是地址,赋值方式为引用传递
		// 是一个地址,arr2的变化会影响arr1
		int[] arr1 = {1, 2, 3};
		int[] arr2 = arr1;
		arr2[0] = 10;

		for(int i = 0; i < arr1.length; i++) {
			System.out.println(arr1[i]);
		}

	}
}

二、内存图

三、数组的拷贝.

public class ArrayCopy {
	public static void main(String[] args) {
		// 将int[] arr1 = {10,20,30}; 拷贝到arr2数组
		// 要求数据空间是独立的
		int[] arr1 = {10, 20, 30};

		// 创建一个新的数组arr2 开辟新的数据空间
		// 大小为 arr1.length;
		int[] arr2 = new int[arr1.length];

		// 遍历arr1 把每个元素拷贝到arr2对应的位置
		for(int i = 0; i < arr1.length; i++) {
			arr2[i] = arr1[i];
		}

		// 修改arr2的元素
		arr2[0] = 100;

		// 输出arr1
		for(int i = 0; i < arr1.length; i++) {
			System.out.println(arr1[i]);//10,20,30
		}
		// 输出arr2
		for(int i = 0; i < arr2.length; i++) {
			System.out.println(arr2[i]);//100,20,30
		}
	}
}

四、数组翻转

方法一

public class ArrayReverse{
	public static void main(String[] args) {
		// 定义数组
		int[] arr = {11, 22, 33, 44, 55, 66};
		/*
		思路分析
		先找规律
		1.把 arr[0] 和 arr[5] 进行交换 {66,22,33,44,55,11}
		2.把 arr[1] 和 arr[4] 进行交换 {66,55,33,44,22,11}
		3.把 arr[2] 和 arr[3] 进行交换 {66,55,44,33,22,11}
		4.一共要交换 3 次 = arr.length / 2 
		5.每次交换对应的下标是 arr[i] 和 arr[arr.length -1 - i]
		*/
		// 定义变量,保存数据
		int temp = 0;
		int len = arr.length;//计算数组的长度
		for(int i = 0; i < len / 2; i++) {
			temp = arr[arr.length -1 - i];//保存
			arr[arr.length -1 - i] = arr[i];
			arr[i] = temp;
		}
		
		for(int i = 0; i < len; i++) {
			System.out.print(arr[i] + "\t");//66,55,44,33,22,11
		}

	}
}

方法二

public class ArrayReverse01 {
	public static void main(String[] args) {
		// 定义数组
		int[] arr = {11, 22, 33, 44, 55, 66};
		/*
		思路
		使用逆序赋值方式
		1.先创建一个新的数组 arr1,大小为arr.length
		2.逆序遍历arr 将每个元素拷贝到arr1的元素中
		3.增加一个循环变量 j ->0 ->5
		*/

		int[] arr1 = new int[arr.length];
		for(int i = arr.length - 1,  j = 0; i >= 0; i--, j++) {
			arr1[j] = arr[i];
		}
		// 将arr指向arr1的数据空间,此时arr原来的空间就没有变量引用
		// 会被当作垃圾销毁

		arr = arr1;

		// 输出arr
		for(int i = 0; i < arr1.length; i++) {
			System.out.print(arr[i] + "\t");//66,55,44,33,22,11
		}

	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值