zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    POJ 2019
    POJ 3368
    POJ 3264
    POJ 2828
    POJ 3481
    结构光相移法-多频外差原理+实践(上篇)
    基于MAP-MRF的视差估计
    重磅直播|计算深度分割技术的实现与全局效应下的结构光三维重建
    用于类别级物体6D姿态和尺寸估计的标准化物体坐标空间
    通过几道CTF题学习Laravel框架
  • 原文地址:https://www.cnblogs.com/findumars/p/4106768.html
Copyright © 2011-2022 走看看