概念
值传递
方法调用时,实际参数的值传递到方法中的形式参数下,方法接收的是原始值的copy。
引用传递
方法调用时,实际参数的引用被传递给方法中对应的形式参数,此时在方法内对该参数的修改会更改会体现在实际参数上。
在java 中方法有传入参数和返回参数,而在abap中参数分为了传入参数,传出参数,更改参数以及返回参数这种更好理解的参数类型,那么这里引用传递和值传递结合这些类型的参数就会产生一种理解上的偏差。
示例
引用传递时
以FORM ,using参数,chaing参数,起到的均为为chaging参数的效果
示例如下:
结果:
以FUNCTION/METHOD为例
由于语法不允许在函数/方法中对import进行更改,所以此时EXPORTING参数和CHANGING 参数起到同样的效果(因此函数中在使用EXPORTING参数时注意清空变量,特别是表类型)。RETURN 参数为返回参数,只可值传递。
示例如下:
结果:
值传递
由于结果为原数据的copy,所以不会改变原数据,依托于参数类型的理解,不再特殊举例.
引用传递/值传递实际效果
如下function中对参数进行了更改,切换到上一层调用,对用参数对应发生了更改,而值传递时,更改在函数执行结束后才会赋值回去。
![](https://i-blog.csdnimg.cn/blog_migrate/263e09d0705888017ecc487d6d26a265.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a56a840690fb7381300ea85b7ff2fbbb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5cb70ea2ada2a0413b22c93b1cfb916c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1b7b241d1c3645aaf6f0e6bc99f69775.png)
效率问题
F1帮助如下:
实测:
![](https://i-blog.csdnimg.cn/blog_migrate/67afe89589ae5cce68e900388b78b692.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0721850bbaa6d122f03966d3c6e71cb2.png)
传递了50万条T001数据进行测试,仅仅截取一次记录,整体看来影响不大。