Java中的地址传递与值传递

值传递

public class Testified {
  public void Test1(int a) {
	 System.out.println(a);  
	   a = 4;
     System.out.println(a);
   }
    public static void main(String[] args) {
		int num=67;
		new Testified().Test1(num);
   	 System.out.println(num);  
    }
}
/*运行结果:
 67
 4
 67*/

如上代码中,main函数中赋值num=67,并在赋值后调用了 方法Test1,而此时语句new Testified().Test1(num);只是将num这个变量对应的值传了进去,而不是变量本身,所以并不会对num的值产生影响,而局部变量a得到数值“67”,所以第一次输出就是67,然后在对a进行二次赋值,所以第二次输出为4,而main函数中输出结果为num值即67;

地址传递

public class Testified {
	 public void Test2(int [] a) {
	  	 System.out.println(a[1]+"..."+a[3]);  
	 	  a[1]=4;
		  a[3]=5;
    	  System.out.println(a[1]+"..."+a[3]);
    }
 	public static void main(String[] args) {
		int []num= new int[] {11,22,33,44,55,66};
		new Testified().Test2(num);
    	System.out.println(num[1]+"..."+num[3]);  
    }
}
/*运行结果:
 22...44
 4...5
 4...5*/

如上代码中,main函数中定义了一个数组 num={11,22,33,44,55,66};注意,数组是引用数据类型,此时num中存储的不是一个数据类型,而是一个地址,而这个地址中存储着我们给num定义的数组;然后调用了Test2函数,int [] a接收了num的地址,此时,Test2方法如上,并不会对地址进行变更,而是对地址所对应的存储的值执行操作,所以System.out.println(a[1]+"…"+a[3])根据a得到的地址,输出了对应的数组中的数,然后进行二次赋值,所以第二次输出为第二次赋值结果,正是因为如此,num的地址对应的数组,已经被如上过程变更,所以最后输出结果为4…5。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值