• Java的Reference感觉很象C++的指针,但是区别是本质的


    Java的Reference感觉很象C++的指针,但是区别是本质的

    他们相同之处在于都是含有一个地址,但是在Java中你无法对这个地址进行任何数学运算,并且这个地址你不知道,是Java Runtime分配给你的,它随时还要调整这个地址(After GC,Memory要Compact,这时候一个Object Reference的地址就会改变)。

    而C/C++之中,你可以对指针变量进行各种操作。譬如下面这个小例子

    #include <iostream.h>
    int main ()
    {
    int numbers[5];
    int * p;
    p = numbers; *p = 10;
    p++; *p = 20;
    p = &numbers[2]; *p = 30;
    p = numbers + 3; *p = 40;
    p = numbers; *(p+4) = 50;
    for (int n=0; n<5; n++)
    cout << numbers[n] << ", ";
    return 0;
    }
    -------------------------------------------------------------------------

    除了指针,C++也有reference。C++里引入了reference似乎是想弥补C指针的种种缺陷,但reference本身却不是lvalue,无法完全替代指针。
    我感觉Java、C#等“高级编程语言”其实脱离不了C的阴影。这个阴影就是指针。虽然各家都说自己的reference是如何与C指针不同的,但骨子里,都是一嘛事。
    为什么呢?现在的计算机体系结构决定的。程序运行时,代码和数据必须在计算机内存里。对象是什么?封装好的数据加代码。要放在内存里就必须占一个地址,并且每个对象占用的地址还必须是唯一的。即使是stateless objects也需要地方来存放自己的类型信息,更别说那些stateful objects的成员变量了。这样,对象就和内存地址有了某种一对一的对应关系:一个对象的reference(或id等任何其他叫法)都是内存地址的一个一一映射函数。

    内存地址和C的指针有区别么?没有。

    参考:http://www.ccthere.com/article/542929

  • 相关阅读:
    堆栈信息分析
    JVM垃圾回收日志结构分析
    grep -n 显示行号
    Zabbix报告无交换内存主机 Lack of free swap space on xxxxx
    Zabbix利用msmtp+mutt发送邮件报警
    Nginx开启Gzip压缩大幅提高页面加载速度
    rsync --exclude 参数
    zabbix 监控客户端数据库 zabbix客户端
    centos 截图命令 screenshot
    centos下安装五笔输入法的教程
  • 原文地址:https://www.cnblogs.com/findumars/p/4106768.html
Copyright © 2020-2023  润新知