java模拟指针,Java中如何模拟指针操作以迁移C++代码
Java中如何模拟指针操作,以迁移C++代码1.前言前段时间做了一项重要的工作,就是将原来开源的ICTCLAS的C++代码,全部迁移到了Java语言重新实现,在迁移完成以后,初步测试没有啥大问题,在此过程中得到了一点小小的经验,特记录下来,以供大家参考。2.问题的分析虽然说Java语言是从C++演化过来,语法关键词基本类似,但C++语言和Java语言相比,有一个最为关键的不同,就是Java 不支持
Java中如何模拟指针操作,以迁移C++代码
1.前言
前段时间做了一项重要的工作,就是将原来开源的ICTCLAS的C++代码,全部迁移到了Java语言重新实现,在迁移完成以后,初步测试没有啥大问题,在此过程中得到了一点小小的经验,特记录下来,以供大家参考。
2.问题的分析
虽然说Java语言是从C++演化过来,语法关键词基本类似,但C++语言和Java语言相比,有一个最为关键的不同,就是Java 不支持指针,无法直接进行地址的计算,这样的话,就给代码迁移带来了很大的困难。
例如下面这段代码,是C++的原始代码。
Java代码
1bool CContextStat::GetItem(int nKey,PMYCONTEXT *pItemRet)
2{//Get the item according the nKey
3 PMYCONTEXT pCur=m_pContext,pPrev=NULL;
4if(nKey==0&&m_pContext)
5 {
6 *pItemRet=m_pContext;
7return true;
8 }
9while(pCur!=NULL&&pCur->nKey10 {//delete the context array
11 pPrev=pCur;
12 pCur=pCur->next;
13 }
14if(pCur!=NULL&&pCur->nKey==nKey)
15 {//find it and return the current item
16 *pItemRet=pCur;
17return true;
18 }
19 *pItemRet=pPrev;
20return false;
21}
在这段代码中,要将这段代码使用Java来实现,最为头疼的地方就是*这个操作符号了,因为Java里面不能直接操作内存地址,因此必须采用转换的方式来进行模拟实现。
3.解决思路
在C语言里面,*操作符号和&操作符号是相对的,一个用来将指针所在地址赋值,一个用来获取一个内存地址。而在Java里面,内存地址是无法直接访问,也无法直接获取的。
因此在上面的例子中,我们首先定义一个PMYCONTEXT类。这个类代表一个一级指针。
Java代码
22/**
23 * PMYCONTEXT的定义是一个指向结构体MYCONTEXT的指针, 是一个一级指针
24 * @author liujunsong
25 *
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)