C++中的指针可能移动或进行相关的指针操作 char* p = new char[4]; ++p = 'a';而java中的所谓的指针是不可以的,只能重新赋值。 Object o1 = new Object(); Object o2 = new Object(); o1 = o2;而o1++ 或++o1类似的操作是绝对不允许的。
所以说Java的对象参数也是按值传递的。 传递的是对象的地址值。 不像C++的按引用传递。 举个例子: Java程序 Class A{ void change(A o){ o = null; } public static void main(String[] args){ A a = new A(); A b = new A(); a.change(b);//这里执行后b!=null } }C++程序 class A{ public: void change(A &o); } void A::change(A &o){ o = NULL; }void main(int argc,char** argv) { A a(); A b(); a.change(b);//这里b==NULL; }
对于对象的传递,从写法上看像是按引用传递,但实际
和C++中的指针值传递没有什么区别。
在IBM的developerworks的Java区中有过一篇文章阐述过这个问题。
你可以去看看。
char* p = new char[4];
++p = 'a';而java中的所谓的指针是不可以的,只能重新赋值。
Object o1 = new Object();
Object o2 = new Object();
o1 = o2;而o1++ 或++o1类似的操作是绝对不允许的。
传递的是对象的地址值。
不像C++的按引用传递。
举个例子:
Java程序
Class A{
void change(A o){
o = null;
}
public static void main(String[] args){
A a = new A();
A b = new A();
a.change(b);//这里执行后b!=null
}
}C++程序
class A{
public:
void change(A &o);
}
void A::change(A &o){
o = NULL;
}void main(int argc,char** argv)
{
A a();
A b();
a.change(b);//这里b==NULL;
}
多看看书你就会明白,我是从c++转java的,也有过迷茫阶段。
共同学习了!