Kotlin空指针安全细节处理:toString与hashCode详解
时间:2026-08-21 | 作者:多维游侠 | 阅读:0发现
在Kotlin中调用Ja va方法时,有时会返回一个可能为Null的对象。
此时调用该对象的hashCode和toString方法,不会报空指针异常。
然而,在Ja va中若这么做,却会直接抛出空指针异常。
实验
比如我存在下方的一个ja va方法:
class Misc
public static JSONObject safeParseJson(byte[] data) {
try {
return new JSONObject(new String(data));
} catch (Exception e) {
return null;
}
}
}
上述方法简单易行,为Android解析JSON字符串的过程增添了一层catch异常保护。
一旦发现字符串不符合JSON格式,便会触发catch异常,从而返回Null。
Ja va中的调用表现
我们如果在ja va中使用该方法时候,故意传一个不满足json格式的字符串,然后调用其hashCode方法:
byte[] invalidJsonBytes = "invalid json".getBytes();
JSONObject json = Misc.safeParseJson(invalidJsonBytes);
System.out.println(">>> " + json.hashCode());
运行上方代码,会发现程序直接报错,空指针异常了。
Kotlin中的调用表现
但是如果放在Kotlin中,相同的调用方式:
val invalidJsonBytes = "invalid json".toByteArray()
val json = Misc.safeParseJson(invalidJsonBytes)
println(">>> " + json.hashCode())
运行代码,可以看到程序正常运行,且输出最终结果hashCode为0.
进一步验证
我们加一行判断,看下这个时候返回的对象是否为Null
val invalidJsonBytes = "invalid json".toByteArray()
val json = Misc.safeParseJson(invalidJsonBytes)
println(">>> " + json.hashCode())
if (json == null) {
println("==> json is null")
}
可以看到程序依然正常运行,并且确实也进入到了为null的判断逻辑中。
原因
Kotlin对于部分方法有制作扩展方法。
比如对于hashCode,toString这类方法,都有定义扩展方法。
这些扩展方法里有包含为空指针的情况。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 迅捷路由器怎么调信号最强,设置时要注意什么?
- 时间:2026-08-27
-
- vivo浏览器怎么卸不掉?原因和解决方法在这里
- 时间:2026-08-27
-
- OPPO R11s黑屏了,怎么强制恢复出厂设置?
- 时间:2026-08-27
-
- 飞利浦显示器包装盒有生产日期和保修期吗?怎么看?
- 时间:2026-08-27
-
- 联想新平板开机必须联网吗?怎么做?
- 时间:2026-08-27
-
- 平板横竖屏切换设置与问题解决
- 时间:2026-08-27
-
- 移动电源容量怎么测?要准备哪些工具?
- 时间:2026-08-27
-
- 荣耀90 Pro防水吗?防水级别多少?怎么用才安全
- 时间:2026-08-27
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15