Mik*_*kis 6 java comparison types pointers
看看这个片段:
List<Integer> c = new ArrayList<>();
Map<String,Boolean> m = new HashMap<>();
if( c == m ) //no error here! WHY?
{
c = m; //"Incompatible types" error, as expected.
m = c; //"Incompatible types" error, as expected.
}
Run Code Online (Sandbox Code Playgroud)
怎么来c == m没有错误?
我正在使用jdk1.8.0.20的javac,我没有理由怀疑它忽略了java语言规范,所以这在规范中具有相当绝对的确定性,因此:
规范允许这样的东西有什么意义/目的/用处?
这是特别允许的,因为List和Map是接口。
我们可以想象一些课程
// (please only imagine)
class ListMap implements List, Map {...}
Run Code Online (Sandbox Code Playgroud)
引用相等(15.21.3 )的编译时合法性与引用类型转换( 5.5.1 )相同。简而言之,由于您通常可以在任何引用类型和接口之间进行转换,因此您通常也可以将任何类型与接口的引用相等性进行比较。
Comparable在较小的接口(如、Serializable、等)的上下文中,该权限似乎更有用Iterable,其中一个类更有可能实现多个接口。
| 归档时间: |
|
| 查看次数: |
674 次 |
| 最近记录: |