14 java hashmap nullpointerexception
我的代码类似于以下内容: -
class A
{
private HashMap<Character, Boolean> myMap;
public A()
{
myMap = new HashMap<Character, Boolean>();
String mychars = "asdfzxcvqwer";
for ( char c : mychars.toCharArray() )
myMap.put(c, true);
}
public doo(String input)
{
StringBuilder output = new StringBuilder();
for ( char c : input.toCharArray() )
{
if ( myMap.get(c) )
output.append(c);
}
}
...
...
}
Run Code Online (Sandbox Code Playgroud)
我在行上得到一个空指针异常if ( myMap.get(c) )- 我做错了什么?
xle*_*ier 46
如果c未包含myMap,则返回null,不能取消装箱boolean.
试试:
Boolean b = myMap.get(c);
if(b != null && b){
...
Run Code Online (Sandbox Code Playgroud)
小智 12
如果myMap不包含匹配的键c,则myMap.get(c)返回null.在这种情况下,当JVM将它期望成为java.lang.Boolean对象的对象拆分为boolean基元以执行条件时,它会找到一个空对象,因此抛出一个java.lang.NullPointerException.
以下块与您的示例中的内容相同,并且应该更容易理解为什么您将拥有NullPointerException:
if (((Boolean) myMap.get(c)).booleanValue())
Run Code Online (Sandbox Code Playgroud)
我会重新写下你的原始条件:
if ( myMap.containsKey(c) )
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助.
小智 6
更改
if ( myMap.get(c) )
Run Code Online (Sandbox Code Playgroud)
至
if ( myMap.containsKey(c) && myMap.get(c))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75068 次 |
| 最近记录: |