- 按值传递是指在方法调用时,传递的参数是按值的拷贝传递.
- 按值传递重要特点:传递的是值的拷贝,也就是说传递后值就互不相关了.
首先明确Java程序设计语言总是采用按值调用。
也就是说,方法得到的是所有参数值的一个拷贝,即方法不能修改传递给它的任何参数变量的内容。
示例1:
public class TempTest {
private void test1(int a) {
a = 5;
System.out.println("test1方法中的a = " + a);
}
public static void main(String[] args) {
TempTest t = new TempTest();
int a = 3;
t.test1(a);//传递后,test1方法对变量值的改变不影响这里的a
System.out.println("main方法的a = " +a);
}
}
打印结果:
test1方法中的a = 5
main方法的a = 3
示例2:
public class TempTest {
private void test1(A a) {
a.age = 20;
System.out.println("test1方法中的age = " + a.age);
}
public static void main(String[] args) {
TempTest t = new TempTest();
A a = new A();
a.age = 10;
t.test1(a);
System.out.println("main方法的a = " +a.age);
}
}
class A{
public int age = 0;
}
打印结果:
test1方法中的age = 20
main方法的a = 20
示例3
public class Ex2 {
public static void main(String[] args) {
int[] a = {1,2,3,4,5};
expand(a);
changeArray(a);
printArray(a);
}
public static void expand(int[] a) {
int[] newArray = new int[a.length * 2];
System.arraycopy(a, 0, newArray, 0, a.length);
a = newArray;
}
public static void changeArray(int[] a){
a[0] = 10;
}
public static void printArray(int[] a){
for(int i = 0; i<a.length; i++){
System.out.print(a[i] + "\t");
}
System.out.println();
System.out.println(a.length);
}
}
输出结果为:
10 2 3 4 5
5
示例3尝试解释一下:
- expend()、changeArray()和printArray()三个方法接收的都是引用类型变量数组a的地址,并可在方法中操作该地址中的内容。
- expend()方法体仅对形式参数的引用地址做了重新指向,并未改变原地址(即主函数中数组a的地址或是内容),所以原数组并未发生改变,主函数中引用类型变量a任然指向的是原数组
- changeArray()和printArray()都对传入的引用类型变量指向的地址空间中的内容(即原数组)做了改变。
示例4
public class Test03 {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
swap(num1,num2);
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
}
public static void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
打印结果:
a = 20
b = 10
num1 = 10
num2 = 20

Java参数传递详解与示例
本文详细介绍了Java中参数传递的机制,包括按值传递的概念及其特点。通过示例代码解析展示了对于基本类型和引用类型参数的区别,强调了方法内部无法改变原始变量的值。此外,还分析了一个涉及数组的示例,说明了引用类型参数在方法间的操作影响。
171万+

被折叠的 条评论
为什么被折叠?



