Java语言中的参数传递详解

本文深入解析Java中参数传递的两种方式:按值传递和按址传递,通过示例代码演示各自的特点及应用场景。同时,介绍如何通过返回值或创建新对象实现按值传递下参数的修改,以及利用按址传递实现类似返回值的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


======================================================
注:本文源代码点此下载
======================================================

和其它程序设计语言类似,java语言的参数传递也分为两种:

1.按值传递(by value)

适用范围:8种基本数据类型、string对象

特点:在内存中复制一份数据,把复制后的数据传递到方法内部

作用:在方法内部改变参数的值,外部数据不会跟着发生改变

2.按址传递(by address)

适用范围:数组、除string以外的其他所有类型的对象

特点:将对象的地址传递到方法内部

作用:在方法内部修改对象的内容,外部数据也会跟着发生改变

基础示例代码:

public class test1{

public static void t1(int n){

n = 10;

}

public static void t2(string s){

s = "123";

}

public static void t3(int[] array){

array[0] = 2;

}

public static void main(string[] args){

int m = 5;

1(m);

system.out.println(m);

string s1 = "abc";

t2(s1);

system.out.println(s1);

int[] arr = {1,2,3,4};

t3(arr);

system.out.println(arr[0]);

}

}

按照上面的参数传递规则,该代码的输出结果应该是:5 abc 2。因为int类型是按值传递,所以把参数m传递到方法t1时,相当于又复制了一份m的值,在方法t1内部修改的是复制后的值,所以m的值不变,s1的输出和m类似。而arr是数组,属于按址传递,也就是把arr的地址传递到了方法t3内部,在方法t3内部修改数组中的值时,原来的内容也发生改变。

以上特性是java语言中的规定,在语法上无法指定参数传递是按值传递还是按址传递,但是可以通过下面的变换实现:

1.对于按值传递的参数,如果需要在方法调用以后修改参数的值,可以利用返回值来实现;

2.对于按值传递的参数,如果需要在方法内部修改时原来的参数不改变,则可以在方法内部重新创建该对象实现。

示例代码如下:

public class test2{

public static int t1(int n){

n = 10;

return n;

}

public static string t2(string s){

s = "123";

returns;

}

public static void t3(int[] array){

//创建新的数组并赋值

int[] newarray = new int[array.length];

//数据拷贝

system.arraycopy(array,0,newarray,0,array.length);

newarray[0] = 2;

}

public static void main(string[] args){

int m = 5;

//重新赋值

m = t1(m);

system.out.println(m);

string s1 = "abc";

//重新赋值

s1 = t2(s1);

system.out.println(s1);

int[] arr = {1,2,3,4};

t3(arr);

system.out.println(arr[0]);

}

}

这样,程序的输出结果就将是:10 123 1。

在实际的程序开发中,可以根据需要使用类似的结构来进行实现。

下面再介绍一个参数传递的常见应用,利用参数传递实现返回值,这样的功能在io类设计的read方法中大量使用。

示例代码如下:

public class test3{

public static void initarray(int[] array){

for(int i = 0;i

在该示例代码中,在initarray方法内部修改了数组的值以后,外部数组a的值也会发生改变,间接实现了返回值的效果。当然,在该示例代码中,因为只返回一个参数,所以作用体现的不明显,如果需要返回多个参数时,使用按址传递是一种不错的主意。

因时间仓促,疏漏之处难免,请大家积极补充和指正。

java教程


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值