ner*_*sol 1 java try-catch nullpointerexception
让我们说我有以下课程:
public class RectangularPrism{
public Integer width;
public Integer height;
public Integer depth;
//setters and getters
}
Run Code Online (Sandbox Code Playgroud)
我用它来计算所有棱镜的体积总和.我有两种计算方法.哪一个更好?
这个使用条件运算符.
public Integer volumeSum(List<RectangularPrism> prismList){
Integer sum = 0;
for(RectangularPrism prism: prismList){
Integer width = prism.getWidth() == null ? 0 : prism.getWidth();
Integer height = prism.getHeight() == null ? 0 : prism.getHeight();
Integer depth = prism.getDepth() == null ? 0 : prism.getDepth();
sum += width * height * depth;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
这个使用try catch块
public Integer volumeSum(List<RectangularPrism> prismList){
Integer sum;
for(RectangularPrism prism: prismList){
try {
Integer width = prism.getWidth();
Integer height = prism.getHeight();
Integer depth = prism.getDepth();
sum += width * height * depth;
}catch( NullPointerException e){}
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
哪一个会更好如果我的班级有100个或更多的字段来决定结果?
使用try catch来处理空值是没关系的吗?
biz*_*lop 13
这在每个级别都是一个坏主意.
try-catch 实际上速度较慢(如果确实存在异常抛出)try-catch块中的任何其他内容抛出合法的NPE,则无法告知发生了什么.(想象一下例如当prism它本身为空时的情况.)?:运算符检查空值是一个众所周知的模式,每个人都会认识到.catch块是一个很大的禁忌,可能是最可靠的生成错误的方法,需要花费很长时间来追踪.null值将意味着try将跳过块的其余部分.当然,sum这仍然是正确的,但这只是巧合.如果您真的想提高性能,请不要使用Integer和其他包装类进行简单计算,int而是使用相应的原语(在本例中).额外的好处是,您突然不必再担心nulls了,因为原始值永远不会null.
说真的,不要.每次你这样做,一只可爱的小猫死了.

| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |