Java 是严格按值传递的

原文:https://www.studytonight.com/java/java-is-strictly-pass-by-value.php

在 java 中,Java 是按值传递还是按引用传递是非常混乱的。

当参数的值被复制到另一个变量中时,称为按值传递,当变量的引用被传递给方法时,称为按引用传递。

这是 C 语言的一个特点,在函数调用过程中传递变量的地址,并反映原始变量的变化。

就 Java 而言,我们没有变量地址的概念,一切都是基于对象的。因此,我们可以在方法调用期间传递基元值或对象值。

注意: Java 是严格按值传递的。这意味着在方法调用期间,传递的是值而不是地址。

示例:

下面是一个例子,其中值是通过值传递的,并且在函数内部进行了更改,但是在函数外部的更改不会反映到原始变量值中。

     class Add
{ 
    int x, y; 
    Add(int i, int j) 
    { 
        x = i; 
        y = j;
    }  
} 
class Demo
{ 
    public static void main(String[] args) 
    { 
        Add obj = new Add(5, 10); 
        // call by value
        change(obj.x, obj.y);
        System.out.println("x = "+obj.x); 
        System.out.println("y = "+obj.y);

    } 
    public static void change(int x, int y) 
    {  
        x++;
        y++;
    } 
}

x = 5 y = 10

让我们再举一个例子,一个对象作为值传递给函数,在这个例子中,我们改变了它的变量值,这些改变反映到了原始对象上。这看起来像是通过参考,但我们区分它。在这里,对象的成员被改变,而不是对象。

示例:

下面是一个传递值并反映更改的示例。

     class Add
{ 
    int x, y; 
    Add(int i, int j) 
    { 
        x = i; 
        y = j;
    }  
} 
class Demo
{ 
    public static void main(String[] args) 
    { 
        Add obj = new Add(5, 10); 
        // call by value (object is passed)
        change(obj);
        System.out.println("x = "+obj.x); 
        System.out.println("y = "+obj.y);

    } 
    public static void change(Add add) 
    {  
        add.x++;
        add.y++;
    } 
}

6 11