@IT·互联网程序员

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

2017-05-25  本文已影响99人  热血沸腾

首先我们来想一个问题,在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!

上一篇 下一篇

猜你喜欢

热点阅读