首先看一个c++小程序
#include<iostream>
#include<vector>
using namespace std;
class De{
public:
int a;
int b;
De(){
a=b=0;
}
};
int main(){
De d1,d2,d3;
d1.a = 10;
d2 = d1;
d2.b = 11;
//比较简单的对象复制
cout << "d1.b " << d1.b << endl;
cout << "d2.a " << d2.a << endl;
vector<De> ve;
ve.push_back(d1); //这儿不是将d1放入ve,而是复制一份d1到ve中,以后取出修改与d1无关,//这个与java有区别
d1.b = 15;
ve.at(0).b = 16;
//这儿可以看到cpp 每一个对象都是一个有自己内存空间的,独立互不影响
cout << "d1 " << d1.b << endl;
cout << "ve.at(0) " << ve.at(0).b << endl;
//cpp 上查看对象地址信息
cout << "d1" << &d1 << endl;
cout << "d2" << &d2 << endl;
cout << "d3" << &d3 << endl;
cout << &ve.at(0) << endl;
return 0;
}
c++运行结果
再看看java小程序
import java.util.Vector;
class De{
int a;
int b;
De(){
a=b=0;
}
}
public class Demo{
public static void main(String[] args) {
De d1 = new De();
De d2 = new De();
De d3 = new De();
d1.a = 10;
d2 = d1;//这里类似c++中的引用,以后修改d1,d2都是等价的,它们指向相同的对象空间
d2.b = 11;
System.out.println("d1.b " + d1.b);
System.out.println("d2.a " + d2.a);
Vector<De> ve = new Vector<De>();
ve.add(d1);//java这里是将d1放到ve中,不再新开辟对象内存,
d1.b = 15;//这里修改会影响 ve中的对象,因为它们都是同一个对象
ve.get(0).a = 16;//同上
System.out.println("d1.a " + d1.a);
System.out.println("ve.get(0).b " + ve.get(0).b);
}
}
java运行结果
这样我们可以对java,c++的对象使用多一些内存上的认识。
自己对java相对知道的多一些,说是java中没有指针,但其实,也许可以认为java中对象名全都是指针 ^_^
而c++定义变量,就是一个变量,内存上互相独立