- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我也是 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/
我是一名优秀的程序员,十分优秀!