Java是按值传递还是按引用传递?

Java是按值传递还是按引用传递? Java是pass by value 还是 pass by reference?这是一个Java面试中常见的问题。

对于原始类型(primitive type也译为值类型),是通过拷贝一个相同的值传给java方法的参数的;而对于引用类型(reference type),就是对象,是通过拷贝一个相同的引用或地址传给java方法的参数的。业界都统称这是pass-by-value(值传递)

 

1.什么是值传递

值传递指的就是是在方法调用时,传递的参数是按值的拷贝传递

    public static void main(String[] args) { 
        int number1 = 10; 
        int number2 = 20; 
        swap(number1, number2); 
        System.out.println(number1); // 10 
        System.out.println(number2); // 20 
    } 
     
    public static void swap(int a, int b) { 
        int t = a; 
        a = b; 
        b = t; 
    }

2.什么是引用传递

引用传递,指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,就是变量所对应的内存空间的地址。

    public static void main(String[] args) { 
        int number1 = 10; 
        int number2 = 20; 
         
        int[] result = swap2(number1, number2); 
        number1 = result[0]; 
        number2 = result[1];         
 
        System.out.println(number1); // 20 
        System.out.println(number2); // 10 
    } 
     
    public static int[] swap2(int a, int b) { 
        int t = a; 
        a = b; 
        b = t; 
        return new int[] {a, b}; 
    }

搞清楚了这两种传递的内涵之后我们再来思考有些人说的那句:“在Java里面参数传递都是按值传递”。

这句话的意思其实应该是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称为“按值传递”

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注