java方法参数接收是值与引用的思考

首先先看一下定义

  • 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
  • 引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

结论:

1、基本类型作为参数传递时,是传递值的拷贝不是值本身),无论你怎么改变这个拷贝,不会引起原值的改变的。

2、对象(String类型除外)作为参数传递时,是把对象在内存中的地址拷贝一份传给参数,即在该方法中修改该参数,引起原值的变化。

校验如下:

public class HelloMethod {
    public void p1(String s1, int i1, StringBuffer sb) {
        i1 = 2;
        s1 = "bcd";
        sb.append("加上abc");
     //思考🤔 sb
= new StringBuffer("eee"); } public static void main(String[] args) { String s2 = "aaa"; int i2 = 1; StringBuffer sb = new StringBuffer("abc"); HelloMethod helloMethod = new HelloMethod(); helloMethod.p1(s2, i2, sb); System.out.println(String.format("s2 = %s ,i1 = %s,sb = %s", s2, i2, sb)); } }

打印:

s2 = aaa ,i1 = 1,sb = abc加上abc

分析:

  1.当传递为String或int给方法时,在方法的内部做更改两个值得操作,其结果没有影响原始值,证明结论1。

  2.当传递的是StringBuffer对象时,在方法内部追加的值,其结果反应到了原始值上,证明结论2。

思考:为什么在方法中对该方法的参数重新赋值不会影响原始值。

  1.在面向对象的语言中(Java,javaScript),方法和方法的参数都是对象。

  2.对参数的重新赋值,就等于丢弃了传入方法的引用,而给方法的参数对象重新赋值。

posted @ 2020-06-04 23:19  爱我-中华  阅读(312)  评论(0编辑  收藏  举报