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

时间: 2024-09-29 23:02:14

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

java的Reference学习

java中Reference学习 谈到Reference想到了什么 Reference提供了一种与jvm gc交互的一种方式,提到Reference,脑中应该浮现一些名词,gc.ReferenceQueue.SoftReference.WeakReference.PhantomReference.FinalReference以及最常见的强引用.我认为当一个小白开始学习Reference的时候应该想一个问题,强引用不够好么,为什么我还需要弱引用.软引用等等这些东西. 为什么我们需要它们 应用程序经

Java Interview Reference Guide--reference

Part 1 http://techmytalk.com/2014/01/24/java-interview-reference-guide-part-1/ Posted on January 24, 2014 by Nitin Kumar JAVA Object Oriented Concepts Java in based on Object Oriented concepts, which permits higher level of abstraction to solve any p

测试一下Word发布刚刚发现通过Word 可以直接发Blog 感觉很新奇,先看看,如果可以呢,将发通知的改了。

? 刚刚发现通过Word 可以直接发Blog 感觉很新奇,先看看,如果可以呢,将发通知的改了. ? 刚刚发现通过Word 可以直接发Blog 感觉很新奇,先看看,如果可以呢,将发通知的改了. ? ? 刚刚发现通过Word 可以直接发Blog 感觉很新奇,先看看,如果可以呢,将发通知的改了. ? ? 刚刚发现通过Word 可以直接发Blog 感觉很新奇,先看看,如果可以呢,将发通知的改了. ? ? 刚刚发现通过Word 可以直接发Blog 感觉很新奇,先看看,如果可以呢,将发通知的改了. ? ?

自己根据公司需求,写的省市区三级菜单(代码感觉很挫,后续思维提高了再改进吧~~)

代码感觉很挫,后续思维提高了再改进吧~~ 全部的HTML贴在这里: <!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"/> <style> ul { margin: 0; padding: 0; } li { list-style: none; } #province, #city, #area { float: lef

二十三岁的最后一天,感觉很微妙

二十三岁的最后一天,感觉很微妙.一个人无眠,很想独坐到黎明降临.当第一屡晨光透过窗帘,属于我的最新的光明.但无法否认,二十四岁的第一刻是黑暗的,黎明前的另人绝望又充满希望的静默.躺在床上,静静的看最后的时间在眼前流过,是不舍吗?时间好象比平常轻缓很多,仿佛看见它在与我挥手,一点点离去.二十四岁代表着新的开始,一种重生.代表着从今天开始,没有理由逃避责任,没有借口过分依赖,没有资格寻求安逸.成熟的年纪,不在是孩子,也就没有所谓的孩子气.

java内存管理机制(一)-运行时数据区

前言 本打算花一篇文章来聊聊JVM内存管理机制,结果发现越扯越多,于是分了三遍文章(文章讲解JVM以Hotspot虚拟机为例,jdk版本为1.8),本文为其中第一篇.from java内存管理机制(一)-运行时数据区  1. java内存管理机制-运行时数据区 2. java内存管理机制-内存分配 3. java内存管理机制-垃圾回收 正文 C++与java之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外的人想进去,墙里的人却想出来…… 与C.C++程序员时刻要关注着内存的分配与释放

一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发

六种异常处理的陋习 你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWriter out = ... 2 java.sql.Connection conn = ... 3 try { // ⑸ 4 Statement stat = conn.createStatement(); 5 ResultSet rs = stat.executeQuery( 6 "select uid,

Java断点续传实现原理很简单

原理解析 在开发当中,"断点续传"这种功能很实用和常见,听上去也是比较有"逼格"的感觉.所以通常我们都有兴趣去研究研究这种功能是如何实现的? 以Java来说,网络上也能找到不少关于实现类似功能的资料.但是呢,大多数都是举个Demo然后贴出源码,真正对其实现原理有详细的说明很少. 于是我们在最初接触的时候,很可能就是直接Crtl + C/V代码,然后捣鼓捣鼓,然而最终也能把效果弄出来.但初学时这样做其实很显然是有好有坏的. 好处在于,源码很多,解释很少:如果我们肯下功

专访黄勇:Java在未来的很长一段时间仍是主流(把老板当情人,把同事当小孩,把客户当病人)

url:http://www.csdn.net/article/2015-09-06/2825621 2015-09-06 13:18 摘要:本文采访了现任阿里巴巴公司系统架构师黄勇,从事近十年的JavaEE应用开发工作.采访内容包含了技术人生.IT职场.程序员.Java Web框架.研发管理.敏捷开发.开源等问题,希望你在技术这条路上不孤单. [编者按] 一个普通的技术人讲述不平凡的技术人生路.黄勇,在工作十年后,写了一本书:<架构探险——从零开始写Java Web框架>,这本书是给他十年技