近期在项目上遇到过一个问题:
先说明下情况:现有一张表单A,A表单有1条分录A1,我需要复制表单A生成表单B,B需要2条分录B1,B2(两条数据不一致)。这两条分录都是复制A1后在A1的基础上修改的。
然后我在处理的时候就发现:我的B1,B2是一模一样的!调试发现我的B1=A1,修改B1是没问题的,但是在B2=A1,修改B2后B1也变了,变成和B2一样了。
后来才发现是引用传递的问题,这边把这个问题及相关的知识点记录下,做下笔记(有理解不对的地方还望指正)。
java数据类型分基础数据类型和引用数据类型:
基础数据类型主要包括:byte,short,int,double,float,long,char
常见的引用数据类型:类,数组,接口等
基础数据类型和引用数据类型在使用“=”号赋值时是不一样的:
基础数据类型是值传递,即把数据的值复制一份给新的对象,在对新的对象修改时不影响原来的对象
引用数据类型是引用传递,传递的是原来对象的地址,即新的对象和原来的对象指向的是同一个地址,所有在上面的情况中,我修改B2的时候,B1也会变。
基础数据类型相对引用数据类型,所占的内存不多,在传递时候可以使用值传递;而引用数据类型在有的时候数据会很大(如类对象有很大属性),这个时候如果还是用值传递就很消耗资源。
如果像我上面这种情况,引用数据类型确实是需要值传递的时候,可以使用clone方法。clone的详细知识可自行了解,这边不做过多描述。