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

标签 java php variables object

我也是 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/

相关文章:

Java Instrumentation - 任何性能下降?

java - Android View InflateException 在尝试启动应用程序时出现

JavaScript 初学者变量混淆

javascript - 变量未传递给函数

java - HTTP 错误 503 : can not access/. 原因 服务不可用

java - 访问类内ArrayList的变量

php - 无法将数据保存到数据库

php - CakePHP 性能问题 - 30-50 秒的模式加载

php - 在 Codeigniter 中写入一个数组来配置?

python - 将局部变量添加到正在运行的生成器