适用范围:8种基本数据类型、String对象
特点:在内存中复制份数据把复制后数据传递到思路方法内部
作用:在思路方法内部改变参数值外部数据不会跟着发生改变
2.按址传递(by address)
适用范围:、除String以外其他所有类型对象
特点:将对象地址传递到思路方法内部
作用:在思路方法内部修改对象内容外部数据也会跟着发生改变
基础举例代码:
public Test1{
public void t1( n){
n = 10;
}
public void t2(String s){
s = "123";
}
public void t3( .gif' />){
.gif' />[0] = 2;
}
public void (String args){
m = 5;
1(m);
.out.prln(m);
String s1 = "abc";
t2(s1);
.out.prln(s1);
arr = {1,2,3,4};
t3(arr);
.out.prln(arr[0]);
}
}
按照上面参数传递规则该代码输出结果应该是:5 abc 2类型是按值传递所以把参数m传递到思路方法t1时相当于又复制了份m值在思路方法t1内部修改是复制后值所以m值不变s1输出和m类似而arr是属于按址传递也就是把arr地址传递到了思路方法t3内部在思路方法t3内部修改中值时原来内容也发生改变
以上特性是Java语言中规定在语法上无法指定参数传递是按值传递还是按址传递但是可以通过下面变换实现:
1.对于按值传递参数如果需要在思路方法以后修改参数值可以利用返回值来实现;
2.对于按值传递参数如果需要在思路方法内部修改时原来参数不改变则可以在思路方法内部重新创建该对象实现
举例代码如下:
public Test2{
public t1( n){
n = 10;
n;
}
public String t2(String s){
s = "123";
s;
}
public void t3( .gif' />){
//创建新并赋值
Array = [.gif' />.length];
//数据拷贝
..gif' />copy(.gif' />,0,Array,0,.gif' />.length);
Array[0] = 2;
}
public void (String args){
m = 5;
//重新赋值
m = t1(m);
.out.prln(m);
String s1 = "abc";
//重新赋值
s1 = t2(s1);
.out.prln(s1);
arr = {1,2,3,4};
t3(arr);
.out.prln(arr[0]);
}
}
这样输出结果就将是:10 123 1
在实际开发中可以根据需要使用类似结构来进行实现
下面再介绍个参数传递常见应用利用参数传递实现返回值这样功能在IO类设计read思路方法中大量使用
举例代码如下:
public Test3{
public void initArray( .gif' />){
for( i = 0;i < .gif' />.length;i){
.gif' />[i] = i;
}
}
public void (String args){
a = [10];
initArray(a);
for( i = 0;i < a.length;i){
.out.prln(a[i]);
}
}
}
在该举例代码中在initArray思路方法内部修改了值以后外部a值也会发生改变间接实现了返回值效果当然在该举例代码中只返回个参数所以作用体现不明显如果需要返回多个参数时使用按址传递是种不错主意
最新评论