android ndk 中,java的string传到c++的char*再传回来,输出我看到是一样的,但是系统判断不一样,原因?

c++部分JNIEXPORTjstringJNICALLJava_com_……_MainActivity_rib(JNIEnv*env,jobjectthiz,jstri... c++部分
JNIEXPORT jstring JNICALL Java_com_……_MainActivity_rib(JNIEnv *env, jobject thiz, jstring x)
{
char* name = Jstring2CStr(env,x);
return env->NewStringUTF(name);//C++语法
}
char* Jstring2CStr(JNIEnv* env, jstring jstr)
{
char* rtn = "";
jclass clsstring = env->FindClass("java/lang/String");
jstring strencode = env->NewStringUTF("GB2312");
jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");
jbyteArray barr = (jbyteArray)(env)->CallObjectMethod(jstr,mid,strencode);//String.getByte("GB2312");
jsize alen = env->GetArrayLength(barr);
jbyte* ba = env->GetByteArrayElements(barr,JNI_FALSE);
if(alen > 0)
{
rtn = (char*)malloc(alen+1);//new char[alen+1]; "\0"
memcpy(rtn,ba,alen);
rtn[alen]=0;
}
env->ReleaseByteArrayElements(barr,ba,0); //释放内存
return rtn;
}

java部分:
String a = rib("ceshi");
if(a == "ceshi")
……
else
……
结果一直输出else里面的代码,我输出看结果确实是"ceshi",为什么系统一直判断不正确呢?
展开
 我来答
键盘未找到
2015-08-10 · TA获得超过328个赞
知道小有建树答主
回答量:403
采纳率:100%
帮助的人:264万
展开全部

Java中字符串的比较须要用equals函数:

String a = rib("ceshi");
if( a.equals("ceshi") )
{
   // ... 相同
}
else
{
   // ... 不相同
}
更多追问追答
追问
但是如果c++去判断值也有问题:
JNIEXPORT……_rib(……, jstring x)
{
char* name = Jstring2CStr(env,x);
if(name == "ceshi") ……
else ……
}
c++也判断为不是"ceshi",执行了 else里面的,这个能否解决?
追答

C++判断需要用 strcmp 函数:

#include <string.h>

char * a = "ceshi";
if( 0 == strcmp(a, "ceshi") )
{
   // ... 相同
}
else
{
   // ... 不相同
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
四念住
2015-08-10 · TA获得超过270个赞
知道小有建树答主
回答量:587
采纳率:0%
帮助的人:238万
展开全部
a.equals("ceshi")

别用等号 比较字符串啊。
更多追问追答
追问
但是如果c++去判断值也有问题:
JNIEXPORT……_rib(……, jstring x)
{
char* name = Jstring2CStr(env,x);
if(name == "ceshi") ……
else ……
}
c++也判断为不是"ceshi",执行了 else里面的,这个能否解决?
追答
if( strcmp(name,"ceshi") ==0  ){
//正确
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yehan432
2015-08-10 · 超过31用户采纳过TA的回答
知道答主
回答量:114
采纳率:0%
帮助的人:66.7万
展开全部
if(a == "ceshi")改成
if(a.equals("ceshi"))
追问
a.equals("ceshi")可以使用,感谢您的帮助!
但是如果c++去判断值也有问题:
JNIEXPORT……_rib(……, jstring x)
{
char* name = Jstring2CStr(env,x);
if(name == "ceshi") ……
else ……
}
c++也判断为不是"ceshi",执行了 else里面的,这个能否解决?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式