abap 值传递 引用传递

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了abap 值传递 引用传递相关的知识,希望对你有一定的参考价值。

如题,什么情况下用值传递,什么情况下用引用传递?

参考技术A 引用传递
传递参数时将参数的地址(ADDRESS)传至子程序中,也就是子程序中的参数变量与外部程序的参数变量共享地址内的值。又叫CALL BY ADDRESS,若子程序中的参数变量的值发生了改变,那么,外部程序的实际变量的值也发生改变。
PERFORM <subform> [USING <f1> <f2>...] [CHANGING <fr1> <fr2>...]
推荐,速度快。占有内存少。

值传递
值传递就是将参数的值复制一份到另一个至内存地址中,所以在子程序中参数变量的值的改变不影响外部程序实际变量的值。
PERFORM <subform> [USING VALUE(f1) VALUE(f2)...]...
可减少参数重复定义。

值传递参数并返回最终值
传递参数的方式同值传递相同,但在子程序结束执行是会将传入参数变量的最终值回传一份给外部程序变量。
PERFORM <subform> [.....] [CHANGING VALUE(f1)...]
少用。

参考
http://www.cnblogs.com/foxting/archive/2012/08/01/2619091.html
参考技术B

个人建议:

    表变量,统一用引用传递,也就是在USING或CHANGING后不使用VALUE()

   2. 非表变量,如果希望实参获取经过SUB ROUTINE而导致值发生变化的结果,则使用引用传递;如果希望实参在经过SUB ROUTINE后保持原来的值则使用值传递;

参考技术C 这么理解吧,一般建议使用引用传递,因为这样效率高,速度快,占用内存少。
但是当你不希望子程序修改原变量的值的时候,请务必使用值传递。

以上是关于abap 值传递 引用传递的主要内容,如果未能解决你的问题,请参考以下文章

PHP对象到底是值传递还是引用传递

Java Object 引用传递和值传递

Java值传递和引用传递

值传递和引用传递的区别

java中的参数传递——值传递引用传递

c# 值类型与引用类型 值传递与引用传递