public class AccountManager {
priavte Map accountTotals = new HashMap();
private int retirementFund;
public int getbalance(String accountName) {
**Integer Total = (Integer) accountTotals.get(accountName);
if(total == Null)
total = Integer.valueof(0);
return total.intValue;**
}
public void setBalance (string accountName, int amount) {
accountTotals.put(accountname, Integer.valueof(amount));
}
}
我可以用其中两个替换突出显示的代码来执行它:
1:
int Total = accountTotals.get(accountName);
if(total == null)
total = 0;
return total;
2:
Integer total = accountTotals.get(accountName);
if(total == null)
total = 0;
return total;
3:
return accountTotals.get(accountName);
有人能告诉我上面哪3个我应该用突出显示的代码替换?为什么?
谢谢!
答案 0 :(得分:1)
您的代码应如下所示:
public class AccountManager {
private Map<String, Integer> accountTotals = new HashMap<>();
private int retirementFund;
public int getbalance(String accountName) {
Integer total = accountTotals.get(accountName);
if(total == null) {
return 0;
}
return total;
}
public void setBalance (String accountName, int amount) {
accountTotals.put(accountName, amount);
}
}
除了源代码中的许多拼写错误之外,还有一些解释:
Map<String, Integer>
。当您从地图上放置或获取数据时,这将为您提供类型安全。Integer
实例。 total == null
条件来检查值是否在地图中。这就是您需要使用Integer total = accountTotals.get(accountName)
代替int total = accountTotals.get(accountName);
的原因。如果该值不存在,后者将尝试取消get()
的结果以将其存储在int
变量中。但由于null
无法取消装箱,因此您将获得NullPointerException
。return total;
即可。即使total
的类型为Integer
且结果类型为int
,Java也会自动取消装箱值。当然,如果total
不是null
。由于您的问题可能是针对Integer
和int
之间的转换,因此您可以看到Java正在自动执行双向转换(装箱:accountTotals.put(accountName, amount)
,取消装箱:{{1 }})。您只需要记住,只有return total
可以包含Integer
,如果您尝试取消null
值,则会获得null
。
答案 1 :(得分:0)
int不允许为null。允许整数为空。来自hashmap的访问可以返回null,因此该值不能是int ...