gpt4 book ai didi

java - 如何在 Java 中按值传递变量?

转载 作者:行者123 更新时间:2023-11-30 05:55:08 25 4
gpt4 key购买 nike

我也是 Java 新手,但我对 PHP 非常有经验。当我编写 Java 程序时,我注意到变量不是我所期望的。

All method parameters are passed by value in Java. However, since all Objects are actually references, you're passing the value of the reference when you pass an object. This means if you manipulate an object passed into a method, the manipulations will stick.

来自这里:What are the differences between PHP and Java?

这是什么意思?这是否意味着 Java 中的 foo=blah 就像 PHP 中的 $foo=&$blah?如何在 Java 中只传递值?

最佳答案

意思是,给定

 class Foo { 
private int bar;

public void setBar(int value) {
bar = value;
}

public int getBar() {
return bar;
}
}

public void doSomethingToFoo(Foo foo) {
foo.setBar(42);
}

bar 的更改将在调用站点可见。 是坚持的操纵。传入了对原始对象的引用。为该对象调用了 setter,因此调用点的 getter 将返回 bar 的新值。

Foo foo = new Foo();
doSomethingToFoo(foo);
int bar = foo.getBar(); // gets 42

但是,给定

public void doSomethingElseWithFoo(Foo foo) {
foo = new Foo(); // assigning new instance to variable
foo.setBar(117);
}

由于方法内的 foo 变量已被重新分配,因此此更改在调用站点 可见。引用只是按值传递,变量实际上没有链接或以任何方式连接,它们只是有一个共同的值(引用)。我们现在已经覆盖了一个变量在方法内部的引用,调用点的变量具有与之前相同的引用。

Foo foo = new Foo();
foo.setBar(7);
doSomethingElseWithFoo(foo);
int bar = foo.getBar(); // still is 7!

这有意义吗?

关于java - 如何在 Java 中按值传递变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8664116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com