美文网首页
1.Java值传递与引用传递

1.Java值传递与引用传递

作者: 喜欢多一点 | 来源:发表于2018-03-24 17:59 被阅读0次

    1.在平时写程序的时候,偶尔会遇到这样的问题:调用一个方法修改某一个参数的值,但是程序的运行结果和预料的不一样。而且有时候灵,有时候不灵,这就很头疼。今天来总结一下这个问题的原因。
    2.首先,举个例子来重现问题。


    image.png
    image.png
    image.png

    于是,出现了两个显而易见的问题。
    首先,基本类型和对象类型在方法调用的过程前后,基本类型的原值不会改变,对象类型在经过方法调用后,值发生了改变。

    其次,包装类型是属于对象类型的,但是运行结果和对象类型截然不同。

    那么在调用recount方法的前后,究竟发生了什么事呢?
    答:在调用方法的时候,arg作为形参,将实参的值拷贝到自己这里。当实参是基本类型的时候,在方法内部修改arg的值,本质是修改形参的值,跟实参没有关系。在方法执行完毕后,退出方法栈,arg也就消失了,完全不会影响实参的值。当实参是对象类型的时候,在方法内部修改实际引用的对象的值的时候,外部的实参所对应的对象的值也就被改变了。当参数类型是包装类型(还包括String)时,因为包装类型(String)的对象都是不可修改的,我们在执行这段代码时:str="abcde";
    实际上是创建了一个新的对象,并将形参指向这个新创建的对象,当方法执行完毕后,实参并没有受到影响。

    结论:像包装类、String类这样的类,虽然是对象类型,但是由于他们的对象是不可以修改值的,所以在作为形参的时候,产生的效果类似于基本类型。

    相关文章

      网友评论

          本文标题:1.Java值传递与引用传递

          本文链接:https://www.haomeiwen.com/subject/nhavfftx.html