浅谈C++和Java中对象的等号赋值

随着对C++学习的深入,发现了一些和Java在设计思想上有所不同的地方。其一就是对象的拷贝赋值。

在Java中,如果定义了两个对象s1和s2,在堆内存中将会创建两个对象实体。那么s1 = s2;表示s1指向的对象发生改变,即指向了s2所指向的对象实体。此时s1和s2的地址是相同的,对s1的变更将会引起s2的变更。

浅谈C++和Java中对象的等号赋值_第1张图片

在C++中,以同样的方式创建两个对象s1和s2,同样在堆内存中会创建两个对象实体。此时若s1 = s2;,则表示将s2的内容复制给s1,s1的地址不发生改变,对s1的变更不会引起s2的变更。

浅谈C++和Java中对象的等号赋值_第2张图片

所以说,虽然Java中没有指针,但其实指针的概念已经隐藏在等号赋值之中。对象的拷贝赋值操作,其实更改的是对象隐藏的"指针"

你可能感兴趣的:(C++,java,c++)