有點像Java里定義一個對應引用一樣,但Java里沒有直接對某個基本變量定義一個引用,除非使用基本類型所對應的包裝類型,JDK5后好像支持自動裝箱與自動拆箱了吧。可以把引用理解成一個地址
1.12. 數據引用、對象引用
TYPE REF TO data 數據引用data references
TYPE REF TO object 對象引用object references
除了object,所有的通用類型都能直接用TYPE后面(如TYPE data,但沒有TYPE object,object不能直接跟在TYPE后面,只能跟在TYPE REF TO后面)
TYPE REF TO 后面可接的通用類型只能是data(數據引用)或者是object(對象引用)通用類型,其他通用類型不行
1.12.1. 數據引用Data References
DATA: dref TYPE REF TO i ."dref即為數據引用,即數據指針,指向某個變量或常量,存儲變量地址
CREATE DATA dref.
dref->* = 2147483647."可直接解引用使用,不需要先通過分配給字段符號后再使用
DATA: BEGIN OF strct,
c,
END OF strct.
DATA: dref LIKE REF TO strct .
CREATE DATA dref .
dref->*-c = 'A'.
TYPES: tpy TYPE c.
DATA: c1 TYPE REF TO tpy.
DATA: c2 LIKE REF TO c1."二級指針
GET REFERENCE OF 'a' INTO c1.
GET REFERENCE OF c1 INTO c2.
WRITE: c2->*->*."a
1.12.2. 對象引用Object references
CLASS cl DEFINITION.
PUBLIC SECTION.
DATA: i VALUE 1.
ENDCLASS.
CLASS cl IMPLEMENTATION.
ENDCLASS.
DATA: obj TYPE REF TO cl.
CREATE OBJECT obj."創建對象
DATA: oref LIKE REF TO obj. "oref即為對象引用,即對象指針,指向某個對象,存儲對象地址
GET REFERENCE OF obj INTO oref. "獲取對象地址
WRITE: oref->*->i."1
1.12.3. GET REFERENCE OF獲取變量/對象/常量地址
DATA: e_i3 TYPE REF TO i .
GET REFERENCE OF 33 INTO e_i3.
WRITE: e_i3->*."33
"但不能修改常量的值
"e_i3->* = 44.
DATA: i TYPE i VALUE 33,
dref LIKE REF TO i."存儲普通變量的地址
GET REFERENCE OF i INTO dref.
dref->* = 44.
WRITE: i. "44