java所提供的所有复制都是浅层复制,即仅改变了对象所指的内存空间,而在C++中的复制是不同的
首先在java中的一段代码:
public class Test {
int a;
public static void main(String[] args) {
Test test1 = new Test();
test1.a = 5;
Test test2 = test1;
System.out.println(test1.a+" "+test2.a);
//改变test1类中a的值
test1.a = 10;
System.out.println(test1.a+" "+test2.a);
}
}
输出结果如下:
5 5
10 10
可以看到,当改变了test1中a的值后,test2中a的值也跟着改变了;
再来看一段c++的代码:
#include
using namespace std;
class MyClass
{
public:
int a;
};
int main()
{
MyClass c1;
c1.a = 123;
MyClass c2 = c1;
//当c2为c1的引用
// MyClass &c2 = c1;
cout<<"c1: "<
<
输出结果如下:
在c++中的输出结果明显跟java中的不同,当改变了c1中a的值后,c2中a的值是没有跟着变的。
如果要让c2中的a也跟着变的话,可以将c2定义为c1的引用;这时所输出的结果就跟java中是一样的了。
因为在java中令test2=test1;之后,test2跟test1所指的内存空间是同样一块区域,(可以输出验证一下)
而在c++中,c1 跟c2这两个对象始终指向不同的地址空间,除非令c2为c1的引用。