论坛首页 Java企业应用论坛

一个绝对害了不少人的Java技术问题!

浏览 92911 次
该帖已经被评为精华帖
作者 正文
   发表时间: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++中那样,这个就是关键所在!
0 请登录后投票
   发表时间: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著.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics