Tag: ternary operator

使用Java三元运算符时的奇怪行为

当我写这样的java代码时: Map map = new HashMap() Long number =null; if(map == null) number = (long) 0; else number = map.get(“non-existent key”); 应用程序按预期运行但当我这样做时: Map map = new HashMap(); Long number= (map == null) ? (long)0 : map.get(“non-existent key”); 我在第二行得到一个NullPointerException。 调试指针从第二行跳转到java.lang.Thread类中的this方法: /** * Dispatch an uncaught exception to the handler. This method is * intended to be […]

为什么将三元语句中的空值赋给布尔变量会抛出NPE?

我有一部分代码如下: public static void main(String[] args) throws Exception { String trueValue = Boolean.TRUE.toString(); String fieldValue = null; Boolean defaultValue = null; Boolean value = (fieldValue != null ? trueValue.equalsIgnoreCase(fieldValue) : defaultValue); System.out.println(value); } 当defaultValue不等于null ,代码工作正常,但是当defaultValue为null ,JVM会抛出NullPointerException 。 此代码使用jdk 1.6.45编译。 为什么我得到这个例外?

java三元条件奇怪的空指针exception

有人可以解释我为什么在第一种情况下检测到空指针,但另一方面没有? 也许他总是看第一种类型,但为什么只有在条件错误时才这样做。 @Test public void test1() { final Integer a = null; final Integer b = false ? 0 : a; //===> NULL POINTER EXCEPTION } @Test public void test2() { final Integer b = false ? 0 : null; //===>NOT NULL POINTER EXCEPTION } @Test public void test3() { final Integer a = null; […]

JDK 7中generics和三元运算符的编译错误

编写一些Java代码时遇到编译失败,我将其提炼为以下测试用例: import java.util.Collections; import java.util.List; public class TernaryFailure { public static List thisWorks() { return Collections.emptyList(); } public static List thisFailsToCompile() { return true ? Collections.emptyList() : Collections.emptyList(); } } 上面的代码无法使用JDK 1.7.0_45的javac进行编译: $ javac TernaryFailure.java TernaryFailure.java:10: error: incompatible types return true ? Collections.emptyList() : Collections.emptyList(); ^ required: List found: List 1 error 但是,它在JDK 1.8.0_05中编译没有任何错误。 这是Java […]

为什么我可以在三元操作中将原始类型设置为null

我一直认为Java中的原始类型不能为null ,因为如果我尝试执行以下操作,则编译时错误: int test = null; 然而,在三元操作中,似乎允许: int test = something != 0 ? 5 : null; 不是三元操作(在这种情况下): int test; if (something != 0){ test = 5; } else { test = null } 当然不应该被允许。 如果该条件失败,由于自动装箱,它将自动抛出NullPointerException 。 那么为什么java编译器不会像这样获取废话呢?

为什么三元运算给出了nullpointer,而ifelse对应的呢?

我在下面的一个实例中得到NullPointerException,而它的对应运行顺利。 public static void main(String[] args){ System.out.println(withTernary(null, null)); //Null Pointer System.out.println(withIfElse(null, null)); //No Exception } private static Boolean withTernary(String val, Boolean defVal){ return val == null ? defVal : “true”.equalsIgnoreCase(val); } private static Boolean withIfElse(String val, Boolean defVal){ if (val == null) return defVal; else return “true”.equalsIgnoreCase(val); } 在线版 在线版本中main反转 ,从withIfElse输出null ,然后在withTernary失败。 我正在使用以下java版本 java version […]