代码如下:
public static void main(String[] args) {
DispatcherServlet dispatcherServlet = new DispatcherServlet();
A a = dispatcherServlet.new A("bb");
dispatcherServlet.da(a); // 此行执行完毕,a.getA()值是bb
System.out.println(a.getA());
}
private A da(A a) {
a = new A("aaaaa");
return a;
}
class A {
private String a;
public A(String a) {
this.a = a;
}
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
}
疑惑如注释。为何da方法里的new值回到main后会丢失?
经学习得出以下结论:
- java只有值传递,没有引用传递
- 非原始类型也是值传递,传递的是值是该引用,为副本。
因此:
- 在da中修改a的属性值,可以在da方法外生效。
- 在da中修改a的引用(重新对a赋值),修改的是引用副本。在da方法外不生效!
希望对其它碰到这种问题的人,不明所以的人有所帮助!!哈哈\(^ ^)/
虽然说, java没有把指针明文写出来, 但是还是有用到指针的.
dispatcherServlet.da(a); // 这里虽然写的是a这个对象, 但是在方法里使用的是引用
java里面分为对象, 和 对这个对象的引用对象(或者说指针?).
举例:
仓库里的货a, 和这个a货的清单 qd_a, 清单上写了a货在哪个仓库, 哪个区域的哪个位置.
有人把qd_a上的数据改了, 指向了货b, 但是货a却没有受影响, 受影响的是 qd_a这个清单.
这是我理解的.不知道解释清楚了没.. 希望指正.