java中类型的两种传值方式,按址传递和按值传递

来源:互联网 发布:mysql grouping 编辑:程序博客网 时间:2024/05/28 01:34



执行程序后,输出结果是:10 123。为什么通过方法调用,为什么变量 的值未改变,而 a[0] 的值发生了改变呢?


在参数传递时,一般存在参数传递的规则,JAVA 语言中也是这样,这两种方式是:


1 按值传递(by value)
按值传递指每次传递参数时,把参数的原始数值拷贝一份新的,把新拷贝出来的数值传递到方法内部,在方法内部修改参数时,则修改的是拷贝出来的值,而原始的值不发生改变。


1.说明:使用该方式传递的参数,参数原始的值不发生改变,

2.若要修改按值传递的值:通过把修改以后的参数值返回,来为变量赋值,强制修改按值传递参数的值,从而达到修正参数值得目的。(就不写示例代码了)


2 按址传递(by address)
按址传递指每次传递参数时,把参数在内存中的存储地址传递到方法内部,在方法内部通过存储地址改变对应存储区域的内容。由于在内存中固定地址的值只有一个,所以当方法内部修改了参数的值以后,参数原始的值发生改变。


1.说明:使用该方式传递的参数,在方法内部修改参数的值时,参数原始的值也发生改变。


2.若要避免修改按址传递的值:通过重新生成变量避免修改参数的值

例如上面的代码,可以通过在方法内部重新创建一个数组,并且把传入数组中每个参数的值都赋值给新创建的数组,从而实现复制数组内容,然后再修改复制后数组中的值,原来的参数内容就不发生改变了。(就不写示例代码了)



####按值传递的数据类型:8种基本数据类型和String
####按址传递的数据类型:除String以外的所有复合数据类型,包括数组 类 和接口

阅读全文
0 0