Leo*_*ang 2 php java variables object
我是Java新手,但我对PHP非常有经验.当我编写Java程序时,我注意到变量不是我所期望的.
所有方法参数都通过Java中的值传递.但是,由于所有对象实际上都是引用,因此在传递对象时传递引用的值.这意味着如果您操纵传递给方法的对象,操作将会粘住.
从这里:PHP和Java有什么区别?
这是什么意思?这是否意味着foo=blah在Java中就像$foo=&$blah在PHP中一样?我怎样才能传递Java中的值?
这意味着什么,给定
class Foo {
private int bar;
public void setBar(int value) {
bar = value;
}
public int getBar() {
return bar;
}
}
Run Code Online (Sandbox Code Playgroud)
和
public void doSomethingToFoo(Foo foo) {
foo.setBar(42);
}
Run Code Online (Sandbox Code Playgroud)
对这种变化bar将是为调用可见.这是一种坚持的操纵.传入了对原始对象的引用.为该对象调用了setter,因此callsite的getter将返回bar的新值.
Foo foo = new Foo();
doSomethingToFoo(foo);
int bar = foo.getBar(); // gets 42
Run Code Online (Sandbox Code Playgroud)
但是,给定
public void doSomethingElseWithFoo(Foo foo) {
foo = new Foo(); // assigning new instance to variable
foo.setBar(117);
}
Run Code Online (Sandbox Code Playgroud)
此更改在调用点上不可见,因为foo方法中的变量已被重新分配.引用只是通过值传递,变量实际上没有以任何方式链接或连接,它们只是有一个共同的值(引用).我们现在已经覆盖了一个变量在方法内部的引用,callsite中的变量具有与之前相同的引用.
Foo foo = new Foo();
foo.setBar(7);
doSomethingElseWithFoo(foo);
int bar = foo.getBar(); // still is 7!
Run Code Online (Sandbox Code Playgroud)
那有意义吗?
| 归档时间: |
|
| 查看次数: |
2061 次 |
| 最近记录: |