比较java c++ 对象之间的区别(内存)
2016-05-26 20:50
363 查看
首先看一个c++小程序
c++运行结果
再看看java小程序
java运行结果
这样我们可以对java,c++的对象使用多一些内存上的认识。
自己对java相对知道的多一些,说是java中没有指针,但其实,也许可以认为java中对象名全都是指针 ^_^
而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++定义变量,就是一个变量,内存上互相独立
相关文章推荐
- [LeetCode] Serialize and Deserialize Binary Tree 二叉树的序列化和去序列化
- 程序是怎样跑起来的-第13章 附录 让我们开始C语言之旅
- C++文件读写详解(ofstream,ifstream,fstream)
- srand((unsigned)time(NULL))详解
- C++的一些简单示例(2)
- 类的特殊成员函数——构造函数
- C语言实现面向对象风格带迭代器的双向链表
- C++ buffer缓冲区的秘密
- 零碎的知识点
- c语言学习比较好的几本书
- C++ STL--stack/queue 的使用方法
- 对象(深入C++对象模型)
- 【运算符重载-数组类运算的实现】
- 【运算符重载-数组类运算的实现】
- 【运算符重载-数组类运算的实现】
- 【运算符重载-数组类运算的实现】
- 【运算符重载-数组类运算的实现】
- c++作业6
- 将序列按照想要的排序,去重
- c++矩阵的转置和快速转置