null和"null",java.lang.StringIndexOutOfBoundsException: String index out of range: -1

这个报错表示使用string的indexOf的时候没有找到对应的index,下标越界了(https://zhidao.baidu.com/question/306567663.html)

比如我从一个jsonObject或者map中通过get("key")来获取一个值,但是这个key其实不存在,结果其实是null

但是我用+"",将值变成了String类型,就会导致null拦截不到空数据,并且读取这个值的时候可能会发生数组下标越界的情况.

关于null和"null"的分析如下:

总结起来就是:

(1)get("key"),如果key不存在,结果是null

(2)get("key")+"",如果key不存在,打印的时候结果是null,但是实际上是"null"(即null拦截不住)

(3)+""之后即使前面接收的类型仍是Object,实际上是String的实例,所以equals不仅是比较内存地址,也能比较内容中的每个字节(Object的equals只比较地址,只有string的equals才会比较内容)

具体验证:

System.out.println("-------------------------------------------------------------------------------------");
//1.map的测试
Map<String, Object> map=new HashMap<>();
map.put("i1", "sds");
map.put("i2", "sds");
map.put("i3", "sds");
//1.1结果是null
System.out.println("----------map.get()的测试--------------------------------------------------------------");
Object objectOfMap1=map.get("i666");
System.out.println("objectOfMap1==="+objectOfMap1);
if (objectOfMap1==null) {
	System.out.println("1.1----objectOfMap1==null");
}
if (!"null".equals(objectOfMap1)) {
	System.out.println("1.1----!\"null\".equals(objectOfMap2)");
}
System.out.println("----------map.get()+\"\"的测试---------------------------------------------------------");
//1.2打印结果是null,但其实是"null",是string的实例(去equals里面打断点可以验证)
Object objectOfMap2=map.get("i666")+"";
System.out.println("objectOfMap2==="+objectOfMap2);
if (objectOfMap2!=null) {
	System.out.println("1.2----objectOfMap2!=null");
}
if ("null".equals(objectOfMap2)) {
	System.out.println("1.2----\"null\".equals(objectOfMap2)");
}

System.out.println("-------------------------------------------------------------------------------------");
//2.com.alibaba.fastjson的测试
JSONObject jObject=new JSONObject();
jObject.put("i1", "sds");
jObject.put("i2", "sds");
jObject.put("i3", "sds");
//1.1结果是null
System.out.println("----------jObject.get()的测试-----------------------------------------------------------");
Object objectOfJson1=jObject.get("i666");
System.out.println("objectOfJson1==="+objectOfJson1);
if (objectOfMap1==null) {
	System.out.println("2.1----objectOfJson1==null");
}
if (!"null".equals(objectOfMap1)) {
	System.out.println("2.1----!\"null\".equals(objectOfJson1)");
}
//1.2打印结果是null,但其实是"null",是string的实例(去equals里面打断点可以验证)
System.out.println("----------jObject.get()+\"\"的测试------------------------------------------------------");
Object objectOfJson2=jObject.get("i666")+"";
System.out.println("objectOfJson2==="+objectOfJson2);
if (objectOfMap2!=null) {
	System.out.println("2.2----objectOfJson2!=null");
}
if ("null".equals(objectOfMap2)) {
	System.out.println("2.2----\"null\".equals(objectOfJson2)");
}
System.out.println("---------------------------------------------------------------------------------------");

 上述代码的if里面的打印语句都能执行,结果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值