C++,Java 指针,引用概念

首先我们来想一个问题,在Java的函数传参中,到底传的是值or引用?

比如

1. public void  printMessage(int i)

外部调用  printMessage(a)


2. public void printMessage(User u)

外部调用 printMessage(user)

1.如果这个时候我在函数里改变 i的内容,那么外面的a 肯定不会变

2.如果这个时候我在函数里改变 u的内容,比如u.setGender("女") 那么外面的u.gender 如果是"男"  这个时候肯定会变成女

这里不懂的、不信的你就试一下。

为什么呢?

Java中函数的形参,不管是基本变量还是对象类型变量,传递的都是一个拷贝。

基本变量的拷贝传递过去,改变不会影响原来的变量。因为变量复制一份

但是对象类型传递的是一份引用拷贝,引用在Java中就是指向某个指针(地址),副本引用的变化直接影响外面的对象也就不奇怪了。

再说一下C++ 里面的指针概念,指针恰恰就解决了另外的问题,拿地址来操作数据(Java只能拿引用来操作)

咱们看到的代码 

int a ;

int *p;

p = &a ;

p是存储指针的变量,里面的值是地址,是可变的。

但是a 是一个引用。 引用可以理解在 内存上打的一个标签, 这个引用所指向的地址是不可变的。 举个例子 a指向内存地址为 0x01的,不可能通过编程手法变成 a指向了内存地址为0x02的。 只可能改变a里面的值,也就是地址0x01里面的数据域

所以大概图形是这样子的


大伙明白了吗?

还记得上面那句话吗,Java只能拿着引用(a)来操作数据,但是C++可以拿着地址(p) 来操作数据。

Java去掉了指针概念,简化了程序难度,理解难度,被更多程序员所接受。

但是Java依旧保留了引用概念,也是根本去不掉的。Halal Madrid!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,002评论 0 7
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,027评论 0 12
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,358评论 0 6
  • 2017年5月26日 农历五月初一 星期五 【早睡早起】 昨晚10:30睡,今早4:00起床。 【学佛】 1.礼...
    陳境墨阅读 311评论 0 0
  • Git使用的人越来越多,它是一个非常好的版本控制软件,GitHub就是一个使用Git作为版本控制的一个远程仓库,上...
    welooooo阅读 359评论 0 0