返回信息流写程序的时候碰到了一个很奇怪的问题
代码大致如下,用了fastjson的库,然后其中o中没有key为"s"的value,这点经过验证了,但是执行下面的语句的时候居然会执行new String的操作,然后抛出了NPE,什么鬼= = 毁三观了
(o.getBytes("s") != null ? new String(o.getBytes("s")) : null)
@nuanyangyang[ema1]
这是一条镜像帖。来源:北邮人论坛 / java / #50770同步于 2016/5/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
三目运算符的疑问
Lamperouge
2016/5/30镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
看了jls的这个部分http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25
貌似是因为一个是null type,一个是reference type 然后这个条件表达式的类型是reference type
然后这个就变成new String(null)?
o本身是null吗?
【 在 Lamperouge 的大作中提到: 】
: 写程序的时候碰到了一个很奇怪的问题
: 代码大致如下,用了fastjson的库,然后其中o中没有key为"s"的value,这点经过验证了,但是执行下面的语句的时候居然会执行new String的操作,然后抛出了NPE,什么鬼= = 毁三观了
: [code=java]
: ...................
byte[] bytes = o.getBytes("s");
String result = bytes != null ? new String(bytes) : null;
这样还会不会NPE了呢?
主贴上的这个例子好像没问题,我之前的代码是:
System.err.println("cN:" + o.getBytes("cN") != null ? new String(o.getBytes("cN")) : null);
然后运算符优先级的问题= = 我蠢了
【 在 nuanyangyang 的大作中提到: 】
: o本身是null吗?
【 在 Lamperouge 的大作中提到: 】
: 主贴上的这个例子好像没问题,我之前的代码是:
: [code=java]
: System.err.println("cN:" + o.getBytes("cN") != null ? new String(o.getBytes("cN")) : null);
: ...................
显然,那相当于:
(("cN:" + o.getBytes("cN")) != null) ? new String(o.getBytes("cN")) : null
但"cN:" + o.getBytes("cN")永远不会是null的。
是的是的~~ 蠢哭了
【 在 nuanyangyang 的大作中提到: 】
: 显然,那相当于:
: (("cN:" + o.getBytes("cN")) != null) ? new String(o.getBytes("cN")) : null
: 但"cN:" + o.getBytes("cN")永远不会是null的。