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

Posted 爱我-中华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java方法参数接收是值与引用的思考相关的知识,希望对你有一定的参考价值。

结论:

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.对参数的重新赋值,就等于丢弃了传入方法的引用,而给方法的参数对象重新赋值。

以上是关于java方法参数接收是值与引用的思考的主要内容,如果未能解决你的问题,请参考以下文章

Java是值传递还是引用传递?

43 Java语言基础思考题Java中的参数传递问题

思考java中core属性的特殊值,如何传递到底是值ins中的类目,全解答过程

Python 到底是值传递还是引用传递

JAVA值传递和引用传递

Java的参数传递是值传递还是引用传递?