每天一道面试题(9)--Java中的方法只支持参数的值传递

Java参数传递详解与示例
本文详细介绍了Java中参数传递的机制,包括按值传递的概念及其特点。通过示例代码解析展示了对于基本类型和引用类型参数的区别,强调了方法内部无法改变原始变量的值。此外,还分析了一个涉及数组的示例,说明了引用类型参数在方法间的操作影响。
  • 按值传递是指在方法调用时,传递的参数是按值的拷贝传递.
  • 按值传递重要特点:传递的是值的拷贝,也就是说传递后值就互不相关了.

首先明确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

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值