引用的理解(面对对象)

来源:互联网 发布:网络兼职诈骗怎么判刑 编辑:程序博客网 时间:2024/06/05 15:28

创建对象就是创建引用指针,指向创建的对象。

声明对象,但是没有创建对象,那么是空指针。

声明一个对象,但是没有创建新的对象,而是引用或者说应用某一个已存在的对象,那么这个声明的应用指向该对象;或者说我们拿到这个对象。

我们可以创建多个声明,引用同一个对象,那么这样我们可以实现对象数据的同步,但是也要注意数据的污染。

在纯面对对象的编程里,除了基本的数据类型(int  char boolean double long short等)其他数据类型都是引用类型,如string,list,map等。

那么我们在数据存储的时候,存储引用类型,那么一定要创建新的引用对象进行存储,否则,存储都是同一个引用对象,那么在数据结构里面有一个操作引用的修改,会导致所有的存储引用都得到修改。(数据污染)


例如:

创建一个list<bean>,在获取不同的数据对象的时候,统一都是list<bean>指向它,来拿到数据。接着在每拿到数据的时候,将list<bean>存储到一定数据结构中。在存储的时候,都打印存储的数据结构大小。(这样我们可以看到我们每一次存储的数据大小,我们看到打印出来的结果,让我们确信我们存储的数据没有问题)

但是当我们将最后一条list<bean>放入到数据结构体中,然后输出所有的数据结构中的数据,我们发现我们存储的数据都是一样的,都是我们最后存储的最后的list<bean>数据。

这是为什么呢?

因为我们存储的都是同一个list<bean>引用对象,在最后一次拿到list<bean>数据,我们也就是把list<bean>赋予最后一条数据,那么存储的数据结构中的同一的list<bean>引用(数据结构中存储的所有引用都是list<bean>)都指向我们最后一次取回的数据,所有数据结构中都是存储的最后拿取的数据。


引用本质是指针,这样方便我们操作对象,保持数据同步。但是也会有时导致我们造成数据的污染,或者操作错误。


作为初级的编程人员,尤其面对对象编程,偶尔会遇到,数据异常。具体现象:明明自己存储的数据是a,取出来发现是b,很奇怪。

那么这一定是数据污染,数据污染!莫名的数据读写有误,一定是数据污染。

一定在别的地方引用了 这个对象而且操作了数据。那么只要好好排查什么地方引用了对象或者指向了这个数据对象,在执行流程中进行了数据操作,便可以纠正数据污染。



0 0
原创粉丝点击