您的位置:首页 > 编程语言 > C语言/C++

比较java c++ 对象之间的区别(内存)

2016-05-26 20:50 363 查看
首先看一个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++定义变量,就是一个变量,内存上互相独立


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: