在C++中可以通过指针相同比较是否同一个实例,但是按照下面这样去匹配jobject却没用
// C++中创建一个本地化的java类
m_objHandler = m_env->NewObject(m_clsHandler, jmConstructor);//上面这个类其中一个函数的C++实现
JNIEXPORT void JNICALL Java_JNISystemHandler_OnAddLog
  (JNIEnv *env, jobject oThis, jstring logMsg, jobject logType)
{//因为会创建多个类实例,所以跟上面保存的m_objHandler比较,是否那个实例
       if (oThis == m_objHandler)
          ; //匹配成功
       else
          ; //匹配失败
}
结果总是匹配失败,知道java里面两个String比较用equals,但C++中的jobject怎么来比较呢

解决方案 »

  1.   

    jobject 是 pEnv->NewGlobalRef 返回的结果,对同一个对象的多个引用 jobject 是不同的,但引用的可能是同一个对象。要判断两个 jobject 使用引用同一个对象,使用 pEnv->IsSameObject 方法。PS:邀请搂主关注与 JNI 相关的免费工具:(国人写的)
    http://www.regexlab.com/jar2exe/
      

  2.   

    IsSameObject 相当于在 java 中使用 ==,表示左右是同一个对象。
    而 equals 的意思是,逻辑上相等,但并不要求一定是同一个对象。如果搂主想要 equals 的效果,而不要 == 的效果,那么,搂住需要在 JNI 中调用 equals 方法。
      

  3.   

    sswater(光杆兵)为正解
    没想到equals在java里面是Object的函数
    谢谢楼上各位