作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
基于下面的代码片段:
// as primitive
MyClass.primitiveMethod(double val); // method signature
MyClass.primitiveMethod(12); // ok
// as object
MyClass.objectMethod(Double val); // method signature
MyClass.objectMethod(12); // error
MyClass.objectMethod(12d); // ok
MyClass.objectMethod((double)12); //ok
问题 1:虽然 12d
和 (double)12
似乎都有效,但指定后缀和显式转换之间有什么区别吗? (行为/表现)
Q2:为什么MyClass.objectMethod(12)
必须被认为是一个错误?虽然 12 应该被解析为 Integer 对象,但 Java 不能足够聪明地知道 12 也是一个 Double 值并直接接受它吗?
最佳答案
对于第一个问题:我期望到double
的转换由编译器执行,但我不想不检查就肯定地说。为了清楚起见,我会改用后缀。 (如果我需要检查,这意味着任何维护代码的人也必须检查......为什么不直接使用正确类型的文字开始?)
12 被解析为 int
,而不是 Integer
- 并且没有从 int
到 Double
的隐式转换>。仅仅因为存在从 int
到 double
的隐式转换以及从 double
到 Double
的隐式转换并不意味着有一个就在那里。
当然,它可以被包括在内——但这意味着为了相当小的好处而使语言更复杂。
关于java - 显式类型转换与对 float/double Java 使用后缀 - 区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8731243/
我是一名优秀的程序员,十分优秀!