可能重复:
Java是"传递引用"吗?
嗨,我已经开发了以下代码.在交换方法中,我交换了两个对象的引用.然后它将在被调用的方法(这里是swap())中更改但在主方法中没有改变.为什么?
class Check
{
public void swap(PassByRefDemoMain obj1,PassByRefDemoMain obj2)
{
PassByRefDemoMain temp;
temp=obj1;
obj1=obj2;
obj2=temp;
System.out.println(obj1.id+ " "+ obj2.id);
}
}
public class PassByRefDemoMain {
int id;
PassByRefDemoMain(int id)
{
this.id=id;
}
public static void main(String[] args) {
PassByRefDemoMain obj1=new PassByRefDemoMain(10);
PassByRefDemoMain obj2=new PassByRefDemoMain(20);
Check obj=new Check();
obj.swap(obj1,obj2);
System.out.println(obj1.id + " " + obj2.id);
}
}
Run Code Online (Sandbox Code Playgroud)
传递给方法的对象作为引用传递,这意味着更改其成员将在外部看到,但引用本身是按值传递的,这意味着调用者不会看到更改引用.这是一个实验:
class Person {
public String name;
}
class Test {
public static void changePerson(Person p) {
p.name = "Tudor";
p = null;
}
public static void main(String[] args) {
Person p = new Person();
p.name = "John";
changePerson(p);
System.out.println(p.name); // prints Tudor and you don't get NPE
}
}
Run Code Online (Sandbox Code Playgroud)
Java是按值传递的.
你只有两个对象.调用swap方法时,会复制两个新引用,但它们指向相同的对象.在该方法中,您只需更改复制的引用所指向的位置.但主要方法中的原始参考文献未被触及.
A - obj1
B - obj2
Acopy - obj1
Bcopy - obj2
Run Code Online (Sandbox Code Playgroud)
方法后:
Acopy - obj2
Bcopy - obj1
Run Code Online (Sandbox Code Playgroud)
但A仍然指向obj1,B仍然指向obj2.
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |