锁定老帖子 主题:一个绝对害了不少人的Java技术问题!
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2005-03-03
大家好象都走到一个死区,可能大家都有C++的背景,很容易把C++和Java中对象的赋值混淆:
在C++中: Test a,b; a.setName("a"); b.setName("b"); /*!!!这里是将对象b中的数据拷贝到a中,注a,b仍然是两个不同的对象(地址不同);*/ a=b; 但当a和b中的数据成员有指针的时候,会导致二者的指针相同,这个需要写拷贝函数来解决。 而在java中a=b则是将b的地址赋给a而已,并不是象c++中那样,这个就是关键所在! |
|
返回顶楼 | |
发表时间:2005-03-06
jbaggio 写道 现在很清楚了,Java只有一种参数传递方式,那就是传值。
--------------------------- 那怎么解释这种情况: public modify(Test t) { t.setName("222") } class Test(){ string name = "111"; public setName...; } main(){ Test test = new Test(); System.out.println(test.getName() ); modify(test); System.out.println(test.getName() ); } 打印的结果是111 222 可见在这里例子中是传引用,不是传值。 从语言设计的角度来说,不可能设计成只能传值。 楼上的和楼主的例子确实有些奇怪。。。。 没看完,我记得Gosling(java Author) 在书里写过,java is only pass by Value,java的引用与传统的理解不同,引用时变量的一种,其值代表了某个对象在虚拟机唯一索引值,可以参考 java编程语言艺术 jame Gosling著. |
|
返回顶楼 | |