Java语言中的参数传递
作者:陈跃峰
在实际的开发过程中,方法调用是一种很常见的操作,在方法调用中,关于参数的处理可能很多进行实际开发的程序员都不一定理解的很清楚,下面系统的介绍一下Java语言中参数传递的规则,以及和参数传递相关的一些问题。
和其它程序设计语言类似,Java语言的参数传递也分为两种:
1、 按值传递(by value)
适用范围:8种基本数据类型、String对象
特点:在内存中复制一份数据,把复制后的数据传递到方法内部
作用:在方法内部改变参数的值,外部数据不会跟着发生改变
2、 按址传递(by address)
适用范围:数组、除String以外的其他所有类型的对象
特点:将对象的地址传递到方法内部
作用:在方法内部修改对象的内容,外部数据也会跟着发生改变
基础示例代码:
publicclass Test1{
publicstatic void t1(int n){
n = 10;
}
publicstatic void t2(String s){
s = "123";
}
publicstatic void t3(int[] array){
array[0] = 2;
}
publicstatic void main(String[] args){
int m = 5;
t1(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{
publicstatic int t1(int n){
n = 10;
return n;
}
publicstatic String t2(String s){
s = "123";
return s;
}
publicstatic void t3(int[] array){
//创建新的数组并赋值
int[] newArray = new int[array.length];
//数据拷贝
System.arraycopy(array,0,newArray,0,array.length);
newArray[0] = 2;
}
publicstatic 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{
publicstatic void initArray(int[] array){
for(int i = 0;i < array.length;i++){
array[i] = i;
}
}
publicstatic void main(String[] args){
int[] a = new int[10];
initArray(a);
for(int i = 0;i < a.length;i++){
System.out.println(a[i]);
}
}
}
在该示例代码中,在initArray方法内部修改了数组的值以后,外部数组a的值也会发生改变,间接实现了返回值的效果。当然,在该示例代码中,因为只返回一个参数,所以作用体现的不明显,如果需要返回多个参数时,使用按址传递是一种不错的主意。
因时间仓促,疏漏之处难免,请大家积极补充和指正。
分享到:
相关推荐
Java语言中参数传递的深入剖析 Java语言中参数传递的机制是一个复杂的主题,对于初学者来说,参数传递机制是一个难点。许多教材、论文和帮助手册对Java语言中参数传递的机制进行了探讨,但这些说法不一,有些模糊带...
浅议JAVA语言中的参数传递 在 Java 语言中,参数传递的方式一直存在一定的争论。一些书中认为,在 Java 中参数传递都是按值传递的,但是这种说法存在一定的模糊性。本文将对 Java 语言中的参数传递进行详尽的说明。...
Java 语言中参数值传递和引用传递是两种不同的参数传递方式,它们在 Java 编程中扮演着重要的角色。参数值传递是指将实际参数的值复制给形式参数,形式参数的变化不影响实际参数的值。引用传递是指将实际参数的引用...
Java 语言中的参数传递是一个关键概念,它涉及到方法调用时如何传递数据。Java 有两类参数传递方式:按值传递(by value)和按引用传递(by reference),虽然 Java 没有真正的按引用传递,但其效果类似于 C++ 或 C#...
参数传递是Java语言中函数调用的重要步骤,清楚地了解参数传递的过程是编写出高质量程序所必须的.大多数程序设计语言具有传值调用和传引用调用的两种方法.通过对典型程序的研究与分析可以看出JAVA语言的参数传递总是...
在本文中,我们将讨论 Java 方法参数传递中的引用类型传递。 在 Java 中,引用类型包括类、接口、数组等,都是对象的引用。这些引用类型在传递过程中,会将对象的引用传递给方法体内的变量,而不是对象的副本。因此...
JAVA语言中的参数传递探究
在Java中,有两种基本的参数传递方式:值传递和引用传递。值传递是将变量的副本传递给方法,而引用传递则是传递变量指向的对象引用。对于基本类型,Java总是使用值传递;而对于对象,实际上是引用的复制,但仍然保持...
在Java编程语言中,关于参数传递的方式一直存在两种观点:一种认为Java仅支持按值传递,另一种则指出Java同时支持按值传递和按引用传递。实际上,这两种观点并非完全对立,而是根据不同的角度来描述Java中的参数传递...
在涉及到C++和Java之间的参数传递时,有一些特定的规则和技巧需要注意。 首先,我们要理解Java对象和C++数据类型的映射关系。在JNI中,Java的基本数据类型如`boolean`, `byte`, `char`, `short`, `int`, `float`, `...
通过上述分析,我们可以清楚地了解到Java中引用和函数参数传递的基本概念以及它们的具体应用。了解这些概念对于正确使用Java进行编程非常重要,尤其是在处理复杂的数据结构和对象交互时。希望本文能帮助读者更好地...
Java语言方法间的数据传递问题是Java语言中一个重要的知识点。Java语言是一种面向对象的编程语言,它的编程方法主要基于对象之间的消息传递。但是,对象之间的消息传递最终还是通过方法之间的数据传递来实现的。...
当用户提交表单时,ASP页面将使用脚本从表单数据中提取经纬度信息,并通过HTTP请求将这些参数传递给一个后端Java服务。Java服务根据接收到的经纬度参数,查询数据库中的景点信息,并将结果返回给ASP页面。ASP页面再...
今天,我们将讨论如何在 Lotus Domino Java 代理中获取传递值 JSON。 代理程序的作用 在 Lotus Domino 服务器上,代理程序可以用来处理用户请求,并返回相应的数据。代理程序可以用 Java 语言编写,具有很高的灵活...
Java中参数传递方式详解 Java 中参数传递方式详解是 Java 新手入门面临的一个经典的话题。本文意在终结这个话题,Java 中有说法:Java 里面参数传递都是按值传递,怎么理解这句话? 按值传递和按引用传递是来自 ...
Java语言支持两种主要的数据类型:**值类型**和**引用类型**。值类型主要包括基本数据类型(如`int`, `float`等)及其对应的包装类(如`Integer`, `Float`)。引用类型则通常指类、数组或接口等对象类型。 ##### 1....
本文档主要介绍 Java 中函数调用参数传递类型的用法,通过对 Applet 概述、Applet 应用程序接口、绘图、Swing 基础、Swing 的特点和概念、Swing 组件、其它 Swing 特性等方面的讲解,展示了 Java 语言程序设计的主要...
java代码-使用java解决中文参数乱码问题的源代码 ——学习参考资料:仅用于个人学习使用!
3. 在Java客户端,调用WebService方法并将JSON格式的字符串作为参数传递给服务端。这个字符串将被序列化为SOAP消息,然后通过网络发送给WebService端点。在客户端代码中,一般需要有一个客户端代理类,这个代理类...
在Java编程语言中,函数参数传递机制是一个关键概念,它涉及到如何在方法内部操作传入的参数。根据Java的特性,参数传递分为两种主要类型:值传递和引用传递。下面我们将详细探讨这两种传递方式以及它们在不同数据...