和其它程序设计语言类似,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"; return s; } 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 < array.length;i++){ array[i] = i; } } public static 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的值也会发生改变,间接实现了返回值的效果。当然,在该示例代码中,因为只返回一个参数,所以作用体现的不明显,如果需要返回多个参数时,使用按址传递是一种不错的主意。
转自:http://java.chinaitlab.com/base/772392.html
分享到:
相关推荐
Java中参数传递方式详解 Java 中参数传递方式详解是 Java 新手入门面临的一个经典的话题。本文意在终结这个话题,Java 中有说法:Java 里面参数传递都是按值传递,怎么理解这句话? 按值传递和按引用传递是来自 ...
在Java编程语言中,关于参数传递的方式一直存在两种观点:一种认为Java仅支持按值传递,另一种则指出Java同时支持按值传递和按引用传递。实际上,这两种观点并非完全对立,而是根据不同的角度来描述Java中的参数传递...
### Java的引用与函数参数传递详解 #### 一、Java中的引用基础 在Java中,对象的引用扮演着类似于其他编程语言(如C/C++)中指针的角色,但是Java的引用比传统的指针更加安全且易于管理。这是因为Java的设计者们...
### Java零基础-参数传递详解 #### 内容概要 本文旨在深入解析Java语言中的参数传递机制。作为一门广泛使用的编程语言,Java提供了多种参数传递的方式,这其中包括了基本类型的值传递以及引用类型的地址传递。同时...
### Java零基础-参数传递详解 #### 内容概要 本文旨在深入解析Java语言中的参数传递机制。作为一门广泛使用的编程语言,Java提供了多种处理数据的方法,其中参数传递是函数(方法)间数据交互的基础。本文将重点...
### JNI中C和Java参数传递详解 #### 一、引言 Java Native Interface (JNI) 是Java平台标准的一部分,用于让Java代码与其他语言写的代码进行交互。本文将深入探讨在JNI环境中,C/C++和Java之间如何进行参数传递,...
Java语言中,参数传递是方法调用过程中的一种机制,讲述了Java参数传递及值传递实现原理详解。参数传递有两种方式:按值传递和按引用传递。 1. 按值传递(Call by Value) 按值传递是指将实参的值复制给形参,形参...
- **参数传递**:探讨在方法调用中参数是如何传递的。 - **匿名对象**:介绍匿名对象的概念及其应用场景。 #### 六、Java类的高级特性 - **访问权限**:讲解public、private、protected等修饰符的作用。 - **方法...
"Java中的参数传递问题详解" Java中的参数传递问题是Java编程语言中一个非常重要的概念,对于初学者和专业开发者都具有重要的参考价值。在这篇文章中,我们将通过示例代码和实践经验,详细介绍Java中的参数传递问题...
java是一种面向对象的编程语言,它的参数传递机制是值传递的,而不是地址传递或引用传递。很多开发者对java的值传递和地址传递存在误解,认为java中的基本数据类型是值传递,而对象是地址传递或引用传递。事实上,...
### Java中this与super详解 #### 一、引言 在Java编程语言中,`this`和`super`是两个非常重要的关键字,它们在面向对象编程中扮演着至关重要的角色。`this`关键字用于引用当前对象,而`super`则用于访问父类中的...
Java 中 String 作为方法参数的传递机制详解 在 Java 语言中,String 类型的变量作为方法参数时,表现出了...同时,在 Java 中,基本类型和对象类型的参数传递机制是不同的,前者是“值传递”,后者是“引用传递”。
5.2.2 类方法的参数传递 81 5.2.3 类方法的返回值 83 5.2.4 值传递与引用传递 84 5.3 类变量和变量作用域 86 5.3.1 Java的类变量 86 5.3.2 Java的变量作用域 87 5.4 递归程序设计 89 5.4.1 递归方法...
在Java编程语言中,了解参数传递的方式对于深入理解程序的行为至关重要。根据传递的数据类型不同,Java中有两种主要的参数传递方式:值传递(Value Passing)和引用传递(Reference Passing)。这两种方式决定了函数...
本资源"JAVA编程实例大全及详解答案(50例)"显然是为了帮助初学者和有经验的开发者深入理解Java语言并提升编程技能。通过50个具体的实例,读者可以学习到如何解决实际问题,理解各种编程概念,并且每个实例都提供了...
3. **参数传递**: Java可以通过命令行参数向Python脚本传递数据。这些参数在Python脚本中通过`sys.argv`获取,其中`sys.argv[0]`是脚本本身的路径,其余参数依次是传递的值。 4. **结果返回**: Python脚本可以通过...
Android AIDL中Map参数传递的问题详解是 Android 应用程序接口定义语言(AIDL)中的一個重要课题。AIDL 是 Android 操作系统中的一個接口定义语言,用于定义应用程序之间的接口。通过 AIDL,可以实现不同应用程序...
Java 反射机制是 Java 语言中的一个重要特性,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并调用对象的方法,甚至修改对象的状态。这一机制极大地增强了 Java 程序的灵活性和可扩展性,尤其是在...
Java可变参数列表,也称为不定参数,是Java语言中的一种特性,允许方法接收数量可变的参数。这种特性在编程时提供了极大的灵活性,尤其是在处理不确定数量输入的情况下。以下是关于Java可变参数列表的详细解释。 1....