代码改变世界

传值和传址

2017-09-07 19:50  lc_java  阅读(363)  评论(0编辑  收藏  举报

基本数据类型和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等  )