以下代码抛出NullPointerException:
int num = Integer.getInteger("123");
Run Code Online (Sandbox Code Playgroud)
我的编译器是否getInteger在null上调用,因为它是静态的?这没有任何意义!
发生了什么?
当我打电话Math.ceil(5.2)给退货的时候double 6.0.我的自然倾向是认为Math.ceil(double a)会回归long.从文档:
ceil(double a)返回
double不小于参数且等于数学整数的最小(最接近负无穷大)值.
但是为什么当结果是整数时返回a double而不是a long?我认为理解它背后的原因可能会帮助我更好地理解Java.它也可以帮助我弄清楚我是否会因为施放到自己而陷入困境long,例如是
long b = (long)Math.ceil(a);
总是我认为它应该是什么?我担心可能会出现一些有问题的边界情况.
boolean当方法boolean Boolean.getBoolean(String name)弹出自动完成窗口时,我最近尝试将字符串文字转换为a .之后还boolean Boolean.parseBoolean(String s)出现了另一种方法(),这使我找到了解这两者之间的差异,因为他们似乎都做了同样的事情.
事实证明,Boolean.getBoolean(String name)真正做的是检查是否存在System给定名称的属性(!)以及它的值是否为true.我认为这是非常误导的,因为我绝对没想到一个方法Boolean实际上正在调用System.getProperty,只是通过查看方法签名,它肯定看起来(至少对我来说)它应该用来解析一个String作为boolean.当然,javadoc清楚地说明了这一点,但我仍然认为该方法有一个误导性的名称,并且它不在正确的位置.其他原始类型的包装器,Integer也有类似的方法.
此外,它似乎不是一个非常有用的方法属于基础API,因为我认为有类似的东西并不常见-Darg=true.对于Java职位面试来说,这可能是一个很好的问题:"输出是Boolean.getBoolean("true")什么?".我相信这些方法更合适的地方就是在System课堂上,例如getPropertyAsBoolean; 但同样,我仍然认为在基础API中使用这些方法是不必要的.将它们放在类似于Properties类的东西中是有意义的,这种类型的转换很常见.
你觉得这一切怎么样?此外,如果你知道另一个"尴尬"的方法,请发布它.
NB我知道我可以使用Boolean.valueOf或Boolean.parseBoolean将字符串文字转换为a boolean,但我只是想讨论API设计.
java ×3
api-design ×1
autoboxing ×1
ceil ×1
double ×1
integer ×1
long-integer ×1
methods ×1
perl ×1
rounding ×1