代码如下:
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没有把指针明文写出来, 但是还是有用到指针的.
dispatcherServlet.da(a); // 这里虽然写的是a这个对象, 但是在方法里使用的是引用
java里面分为对象, 和 对这个对象的引用对象(或者说指针?).
举例:
仓库里的货a, 和这个a货的清单 qd_a, 清单上写了a货在哪个仓库, 哪个区域的哪个位置.
有人把qd_a上的数据改了, 指向了货b, 但是货a却没有受影响, 受影响的是 qd_a这个清单.
这是我理解的.不知道解释清楚了没.. 希望指正.
把这里的a改为成员变量即可
Java是没有引用传递的,也就是说Java不可能让你把整个参数的引用给替换掉。C/C++有引用传递,不过你必须要在参数的前面加上&符号。
java传值,不是传引用,只不过传的是指针的值,所以看起来像引用。。。
da里面
这一句是反映不到函数外面的,a的值(地址)在函数内修改了是没用的,但a的内容可以修改
比如da里面如果有
那你在函数外面打印出来的值就是"aaaaa"了
和这样的C++等价
java只有值传递,没有引用传递
正解,传对象的时候一定要记住你传的不是这个对象自己的内存地址,而是这个对象的值,而这个值就是这个对象引用的地址
我感觉java传递参数的是分情况的吧,
对容器对象比如Map,是传递了引用而不是复制了值
在函数中对map容器的处理是会变化到原始原始调用者, 这就不能叫传值了吧...
简单类型是传值没错
09年的帖子
http://ivan-pig.iteye.com/blog/422891
是否能解决lz的疑问?
对于非原始类型,引用放在栈上,对象本身放在堆上,栈上的引用会复制一份,对象不复制。
java如果想实现引用传递,可以用boxing,即用数组来存取。