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

首先看一个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++定义变量,就是一个变量,内存上互相独立

 

猜你喜欢

转载自blog.csdn.net/xyjincan/article/details/51510446