如何分析Android SDK中String的坑

发布时间:2021-12-10 10:50:07 作者:柒染
来源:亿速云 阅读:144

本篇文章给大家分享的是有关如何分析Android SDK中String的坑,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Android SDK中String的坑

最近一直在查项目中一个SDK相关的bug,我们通过C#代码给java层传入一个string,然后在java层解析出对应的json数据。在使用JSONObject的时候抛出了一个异常"System.err: org.json.JSONException: End of input at character 0 of"。

public void Sample(String json)
{
       JSONObject jsonObj;
       try
       {
           jsonObj = new JSONObject(json);
       }
       catch (JSONException e)
       {
           QLog.Log(e.toString());
           return;
       }
       QLog.Log(json.toString());
}

最终我们定位到是上面代码的

jsonObj = new JSONObject(json);

既然出了问题,我们就做了一个安全判断,在传入null或者空串“”的时候跳过执行。于是就有了下面这个代码。

if(json == null || json == "")
{
QLog.Log("json is null or empty.");
return;
}

但是我们运行代码,发现该行代码并没有被执行到。仍然走到了Json解析的地方,并且抛出了异常。我们在C#层打了log,发现传入的值就是空串“”。但是java层判断空串“”却没有执行到。因此果断搜了java层string的判断接口。终于让真相浮出了水面。

下面是java层string的比较结果。

字符串s1==null,s1不指向堆中任何内存空间,返回true
字符串s1==s2,s1和s2内容一样且s1和s2的内存地址一样,返回true
字符串s1.equals(s2),s1和s2的内容一样,返回true
字符串s1.isEmpty(),s1的长度为0,返回true(String s1=""; s1.isEmpty()是true

C#层判断两个字符串是否相等,其实大部分都是直接用==来判断值是否相等的。如果要判断内存地址是否相等是需要调用ReferenceEquals判断的。

string.ReferenceEquals(s1,s2);

也就是说C#是通过==来判断值相等,通过ReferenceEquals来判断内存地址是否相等。

但是java是通过equal来判断值相等,通过==来判断内存地址是否相等。

平时我们用惯了C#的写法,这里就想当然的用来C#的字符串处理的习惯,需要注意!!!

以上就是如何分析Android SDK中String的坑,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. Android Webview中postUrl与loadUrl加载页面的示例
  2. android studio集成极光推送的操作步骤

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

string android sdk sdk

上一篇:Hive与es数据如何导入和导出

下一篇:Hive中的常见问题有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》