相关疑难解决方法(0)

包装和自动拳击

有以下代码:

Integer time = 12;
Double lateTime = 12.30;
Boolean late = false;
Double result = late ? lateTime : time;  //Why here can I assign an Integer to a Double?
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)

它打印:

12.0

这个不编译.为什么?

Integer time = 12;
Double lateTime = 12.30;
Double result = time;      //Integer cannot be converted to Double
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)

java autoboxing wrapper

10
推荐指数
1
解决办法
301
查看次数

Java三元运算符似乎不一致地将整数强制转换为整数

我的一个学生在使用三元运算符时会得到空指针异常,有时会导致null.我想我理解这个问题,但似乎是因为类型推断不一致所致.换句话说,我觉得这里的语义不一致,错误应该可以避免,而不改变他的方法.

这个问题类似于,但与另一个关于三元运算符的问题不同.在那个问题中,null Integer必须强制为int,因为函数的返回值是int.但是,我学生的代码并非如此.

这段代码运行正常:

Integer x = (5>7) ? 3 : null;
Run Code Online (Sandbox Code Playgroud)

x的值为null.没有NPE.在这种情况下,编译器可以确定三元运算符的结果需要是Integer,因此它将3(一个int)转换为Integer而不是将null转换为int.

但是,运行此代码:

Integer x = (5>7) ? 3 : (5 > 8) ? 4 : null;
Run Code Online (Sandbox Code Playgroud)

导致NPE.发生这种情况的唯一原因是因为null被转换为int,但这并不是必需的,并且似乎与第一位代码不一致.也就是说,如果编译器可以推断第一个snipet三元运算符的结果是整数,为什么不能在第二种情况下这样做呢?第二个三元表达式的结果必须是整数,并且由于该结果是第一个三元运算符的第二个结果,因此第一个三元运算符的结果也应该是整数.

另一个snipet工作正常:

Integer three = 3;

Integer x = (5>7) ? three : (5 > 8) ? three+1 : null;
Run Code Online (Sandbox Code Playgroud)

在这里,编译器似乎能够推断出两个三元运算符的结果都是一个整数,所以不强制将null转换为int.

java casting

9
推荐指数
1
解决办法
1475
查看次数

Eclipse为可访问代码(变体)提供死代码警告

我有以下代码:

public String myMethod(String keyValue) {
    Map<String, Integer> keyValueToRowIndex = ...
    Integer rowIndex = (keyValue == null) ? 0 : keyValueToRowIndex.get(keyValue);
    if (rowIndex == null)
      return null;
    ...
}
Run Code Online (Sandbox Code Playgroud)

Eclipse给出了"死代码"警告return null;.删除测试keyValue == null也删除了警告,但我没有看到额外的测试如何使return语句死代码.显然,如果地图中没有包含某些非null的条目keyValue,那么rowIndex仍然可以为null.或者我在这里遗漏了什么?

我已经看到了类似的Eclipse问题(例如这里),但这个问题似乎是一个不同的,更简单的问题.

java eclipse dead-code

7
推荐指数
1
解决办法
94
查看次数

标签 统计

java ×3

autoboxing ×1

casting ×1

dead-code ×1

eclipse ×1

wrapper ×1