【基础原理】猪仔战软考之传值(byvalue)还是传址(byref)

【前言】

            “气死我了,气死我了。这个破软考,不考了。”
            “怎么了呀,洋妹妹!”
           “你瞎呀!没看做题不会嘛。”
           “…………” 
               “什么题呀?让我看看,我没准能帮帮你呢!”
           
“哎,刚刚有点生气,都是这个破传值传址闹的。我从VB就开始折腾这个,能用的方法都用了,两年了还是搞不懂。不想考了。”  
           “不想考就别考了。”
            “……,你是要上天不?”
           “开玩笑,开玩笑。我保证你没有把能用的方法都用了。至少你从来没问过我呀!/贱笑”
            “那你还不快点说!等我求你呢?/白眼”
             “/冷汗,我哪儿敢啊。这不等你给我看题呢嘛 。”

【正文】

           “那,就是这个!”
                           
           “哦哦,那咱先说这个传值和传地址的问题。先不看题。”
           “我们来两个小例子”
<span style="font-size:18px;"><pre name="code" class="java"><span style="font-size:24px;">main()  
{  
  //按值传递  
  int val = 20 ;  
  print(val) ; //打印的是20  
  setVal(val);   
  print(val) ; //打印的还是20  
  //按引用传递  
  StringBuffer val = new StringBuffer("234");  
  print(val.toString()) ;//打印的是234    
  setStringVal(val) ;  
  print(val.toString()) ;//打印的是234    
  changeStringVal(val);  
  print(val.toString()) ;//打印的是234123  
}  
  
void setVal(int val)  
{  
  val = 10 ;  
}  
void setStringVal(StringBuffer val)  
{  
  val =  new StringBuffer("345");  
}  
void changeStringVal(StringBuffer val)  
{  
  val = val.append("123") ;  
}  </span></span>


 
 


“看,传值的set完有什么变化?”
“没看出来 /冷汗”

“恩,其实没啥变化。”
“我打死你……”
“那你觉得它为啥没有变化呢?”

“是因为按值传递的时候,print(val)这里的val(课本里管它叫形参)其实是把原来的int val =20 这里的val 值复制了一个,成为了一个新的val(课本里叫它实参),而函数内对val进行操作其实是对新复制的val进行操作,那么自然原来的value不会有任何改变了。“



“哦,这样呀!那传地址呢?”

"传地址的话,形参( setStringVal(val)这里的val)就是指向原来value的 地址。我们变成图一步一步代码来看。”



PS:图里的话最重要哦,别漏掉了


 StringBuffer val = new StringBuffer("234")

 现在出现了函数调用(忘了说,传值和传地址是两种函数调用方式,就是说 它是在调用函数的时候才会出现的区别

然后函数内部代码执行

void setStringVal(StringBuffer val) 


val = new StringBuffer("345"); 

}


最后我们打印实参val


最后changestringval 会改变实参是因为形参还是指向了实参的盒子(地
址), void changeStringVal(StringBuffer val) 




val = val.append("123") ; 




【总结】

“这就是实参和形参的区别了。”
“因为指向同一个盒子所以,改了实参,形参会变化,反之亦然。


关于两种方式的参数类型限制。你先自己想想,下次再告诉你。

“好吧,我先想想这个问题,这个我还有点晕呢。”

“哈哈,慢慢想别着急,自己想通了的才是自己的。”
      



评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农胖虎-java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值