专栏首页xyjincan比较java c++ 对象之间的区别(内存)

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

版权声明:本文为博主原创文章,转载请保留出处 https://blog.csdn.net/xyjincan/article/details/51510446

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于python发送ARP欺骗消息

    版权声明:本文为博主原创文章,转载请保留出处 ...

    xyjincan
  • \x 的解码

    版权声明:本文为博主原创文章,转载请保留出处 ...

    xyjincan
  • Java 自动按键,以及cmd脚本调用

    版权声明:本文为博主原创文章,转载请保留出处 ...

    xyjincan
  • 记录一个python里面很神奇的操作,对一个包含列表的元组进行增量赋值

    今天记录一个很神奇的操作。关于序列的增量赋值。如果你很熟悉增量赋值,你也不妨看下去,我想说的是有关于增量赋值和元组之间一种神奇的操作。来自 **《流畅的Pyth...

    用户1682544
  • 文献阅读:Single-cell multiomics sequencing and analyses of human colorectal cancer

    这篇文章由他们之前实验室的Tribio-seq1.0到2.0,由RRBS 变成了 WGBS

    liu_ll
  • 图文简述HBase的用途(一)

    我们平常在存储数据时,会想到用Mysql关系型数据库、大硬盘文档存储等。但是,面临互联网自媒体时代的出现,采用Mysql来存储微信类评论数据、零...

    希望的田野
  • 1、安装GPIO Zero(Installing GPIO Zero)

    官网地址:http://gpiozero.readthedocs.io/en/stable/installing.html

    墨文
  • 8.滑动事件处理

    六月的雨
  • 学习方法分享:为何我一年半就能拿到大厂 offer

    讲真,的确是运气,才有机会进大厂。也没想到,那篇一年半工作经验试水杭州大厂的面经如此受欢迎。后面也有很多朋友在群里问我,你是如何学习的?

    Nealyang
  • 中央重点新闻网站:内容传播影响力分析报告

    大数据文摘

扫码关注云+社区

领取腾讯云代金券