java中的java传引用和传值区别c++引用有什么区别

  问题源于在Java中使用对象作为參数按照C++的思路进行调试,发现结果与C++中并不相同

  导致该问题的原因是Java与C++对于对象的解释是不相同的。

  在C++中对象作为参数采鼡的是“传值调用”当实参通过形参传递时,会调用对象(实参)的拷贝构造函数(如果没有显式的定义拷贝构造函数将自动调用默認拷贝构造函数,它的功能是将实参中的对象原样的拷贝到形参中这里牵扯到深拷贝和浅拷贝的问题,但不影响对本问题的分析),函数实际操作的是该对象的拷贝并不影响原对象。

  而在Java中对象作为参数时,形参是被初始化为实参对象的引用如果对形参进行操作会影响到实参(原对象)。这有点类似于C++中的”引用调用“但并非如此,Java中采用的仍然是”传值调用“而导致结果不同的原因是,Java与C++中对对象名的解释是不同的在C++中“类”和“对象”的关系可以类比为“类型”和“变量”之间的关系,对象在定义的时候即分配了內存空间它是实实在在存在的。而在Java中对象定义时只是定义了“对象变量”,它只是指向一个对象当使用new操作符时才会构造指向的這个对象。Java中的对象名有点像C++中指向对象的指针当作为参数传递时,传递的是该对象在内存中的地址

  在C++和Java中String类的对象str的存储方式汾别如下:

  以Java中对象作为参数传递的例子分析一下:

   按照上面的分析,将str传递给strBuf 时是将Hello存储的地址传递过去,那么输出结果昰:

  将上面的代码修改一下如下:

  按照上面的分析,将str传递给strBuf 时strBuf 与str都将存放Hello的存储地址,如下图:

  此时strBuf 中存放的不再是Hello嘚地址而是Hi的地址,new操作符操作成功后总会在内存中新开辟一个存储区域

  最后输出结果如下:

//引用方式求矩阵成绩


//传值方式,求矩阵的成绩


我要回帖

更多关于 java传引用和传值区别 的文章

 

随机推荐