简单理解Java址传递与值传递

先看一段代码

public class testarr {
	public static void main(String[] args) {
		//首先对数组通过传参进行删除操作
		int[] arr1 = new int[] {2,1,5,9,3,4};
		boolean f = deleteEle(arr1,5);
		System.out.println("==========================");
		System.out.println(f);
		System.out.println("==========================");
		for(int i : arr1) {
			System.out.println(i);
		}
		System.out.println("==========================");
        //再对一个整型数字进行传参操作进行对比
		int a = 10;
		int b = change(a);
		System.out.println(b);
		System.out.println(a);
		a = change(a);
		System.out.println(a);
	}
	//删除数组中的某一个元素
	public static boolean deleteEle(int[] arr , int target) {
		boolean flag = false;
		int index = 0;
		for(int i = 0 ; i < arr.length;i++) {
			if(target == arr[i]) {
				index = i;
				flag = true;
			}
			
		}
		for(int i = index ; i < arr.length - 1 ; i++) {	
			arr[i] = arr[i+1];
		}
		arr[arr.length- 1] = 0;
		return flag;
	}
	//再对一个型数字进行传参操作进行对比
	public static int change(int b) {
		b = b + 3;
		return b;
	}		
}

运行结果如下

==========================
true
==========================
2
1
9
3
4
0
==========================
13
10
13

这段代码表明当一个数组传递给形参数组时,改变形参数组的元素时也会同时改变原来的数组元素。但是一个int变量传递给形参,形参改变却不会改变原来的int变量。
这个问题应该这样解释。数组名实际上就是数组的首地址,如果传递数组名,其实就是把数组的首地址传递给了形参数组的首地址,这样原数组和形参数组就共用相同的内存地址,然后利用它们的地址则可以直接对该地址下对应的数据进行改变。然而基本数据类型如int类型是值传递,把内容复制并传给形参,形参与实参占用两个不同的内存地址。所以改变形参的值改变后不会改变实参的值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值