传值和传址

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了传值和传址相关的知识,希望对你有一定的参考价值。

基本数据类型和String类型作为参数时,为传值方式,只把值传入方法,不管在方法中怎么处理这个参数,原值不变;(基本数据类型见博客)

其他引用类型作为参数时,为传址方式,将指向内存中的地址传入方法,方法中此内存地址中的值发生变化时,原值也会改变; 

(1)如果引用类型的对象通过传址方式将其指向内存中的地址传入方法后,方法中使用new关键字重新给参数赋值时,会在内存中重新开辟空间,参数指向新的内存空间,此时参数和原对象指向的就不是同一个地址了,参数值的变化不会改变原值; 
    (2)String型是引用类型,但是String型作为参数,是传值方式,可以通过以下两种方式来理解: 
        <1>String本质上是基本类型的char[],基本类型作为参数时,为传值方式; 
        <2> 字符串在内存中是存储在堆中的一个常量,String对象指向内存中这个常量的地址,通过传址方式将地址传入方法后,方法中如果通过字符串给参数赋值,则会重新在堆中创建一个字符串常量,并指向这个地址,原值依然指向原来的字符串常量地址,参数值的变化不会改变原值

引用类型

1、接口interface引用 
2、数组array 
3、类Class引用 (Object、String 、Date 、Void、Integer; Long ;Boolean ;Byte等  )

以上是关于传值和传址的主要内容,如果未能解决你的问题,请参考以下文章

Java传值和传址

js 的复制和引用 (传值和传址)

传值和传址

C语言中指针变量的传值和传址

vb当中,参数传递默认方式是传值?传址?还是传址和传值?

Python 函数参数引用(传值/传址)/copy/deepcopy