Float testFloat = null;
Float f = true ? null : 0f;
Float testFloat = null;
Float f = true ? testFloat : 0f;
但最奇怪的是,这段代码也在没有任何异常的情况下成功运行:
Float testFloat = null;
Float f = testFloat;
看起来Java的三元运算符改变了行为。有人能解释一下这是为什么吗?
行为在JLS条件运算符中指定:
如果第二个和第三个操作数中的一个是原语类型T,而另一个操作数的类型是对T应用装箱转换(§5.1.7)的结果,那么条件表达式的类型是T。
强调我的。因此,在2nd的情况下:
Float f = true ? testFloat : 0f;
null type - S1
float - S2
null type - T1 (boxing null type gives null type)
Float - T2 (float boxed to Float)
问题内容: 为什么此代码有效? 为什么这会引发异常? 但是最奇怪的是,该代码也可以成功运行,没有任何异常: 看来Java的三元运算符会改变行为。有人可以解释为什么吗? 问题答案: 该行为在JLS- 条件运算符中 指定: 如果第二和第三个操作数中的一个是原始类型T的,并且其他的类型是施加装箱转换(§5.1.7)到T的结果,则 条件表达式的类型为T 。 强调我的。因此,在第二种情况下: 由于第三个操作
问题内容: 请考虑以下代码片段: 据我所知(以及我的IDE可以告诉我的),变量和应该是等效的。 如您所料,我宁愿写最后2行而不是前7行。但是,当我向该方法传递3个空值时,在变量的计算上得到了NPE 。 有人知道这怎么可能吗?即使条件不满足,三元运算符也会评估第二部分吗? (Java版本1.6.0_21) 问题答案: 尝试: 要么 三元运算符的交替边的类型是和,这意味着将get取消装箱到,然后在赋值
为什么第一次计算的结果比第二次计算的结果大? 结果:
所以我更新了代码,添加了行所做的是将主线程置于Hibernate状态一段时间,因此jvm可以获得一些时间来创建一个新线程。我正在得到我的预期输出
我正在使用Mapstruct映射将一个POJO转换为另一个POJO模型 以下是mapstruct自动生成的方法 该方法基本上获取源POJO的映射,并将其转换为目标模型的映射。生成正在通过。 当我运行代码时,我在这个方法中得到了ClassCast异常:HeaderAttributeGenericDataTypeMaptoStringEnergiectAttributeDataMap 堆栈跟踪: 我还
你认为这个表达的结果是什么? 不!!!是15! 现在让我们看看另一个类似的说法: 还是不,现在是10。为什么呢?我不明白。但是等等,还有两个: 最后一点: 那么有人能告诉我们为什么javascript会这样吗?