java函数中的参数传递

一、在java函数中,传递参数的时候。参数传递分为基本类型和引用类型。

1、基本类型a作为函数的参数传递时,不管函数中如何修改这个传递的基本类型参数a,都不会影响这个基本类型参数a的值。

      例如:基本类型分别为(int, boolean, short, char, float, double, byte, long)

             

 a、这是因为基本类型变量存放在栈中。其实每个函数在线程中运行时,都会给当前线程创建一个虚拟机栈,而虚拟机栈中包含栈帧,栈帧就是我们的每方法,虚拟机栈中栈帧的出栈和入栈就是函数的调用过程。

 b、在栈帧中存在一个局部变量表,这个局部变量表就是我们平时说的栈。很显然这里的render()方法有一个栈帧,fullBasic()方法也存在一个栈帧,在调用方法fullBasic的时候传入了2个基本类型的参数。而基本类型参数相当如值传递,那么这里调用fullBasic(a, flag),传入的两个参数相当如在方法fullBasic()中定义了两个基本类型int a = 1和boolean flag = true。这时候fullBasic()方法修改的也就是自己方法中的a和flag所以不会影响上render()方法的a和flag。而且在fullBasic()栈帧被回收时。这两个局部变量也会随着栈帧的消失而被回收,结构类型如下。

2、引用类型user作为函数的参数传递时,是引用传递,函数中修改user值会影响外部函数user对象的值。例如:

a、这里传递引用类型User。new User()的实例对象放在堆中,在fullRefence()方法中得到的参数user是引用传递,而user引用在方法renderTwo的栈帧中,在fullRefence()方法中修改的值,其实就是修改同一个堆中的new User()对象的值。所以外部方法renderTwo()输出的user的名称会改变。

b、这里要注意的是String对象,在java中,我们都知道String也是引用类型。但是为什么我这里在方法fullRefence()修改传入的String对象的值,在外部函数renderTwo()中没有改变呢?

c、string作为传递对象的时候,也是引用传递,但是因为string是不可变类型,所以在调用方法的时候,改变string的值,是相当于在堆里又重新创建了string对象,所以输出结果的时候,方法调用前和方法调用后输出的结果是一致的。即使我这里使用new String(),结果还是一样。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值