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