就像标题所说的那样。以下陈述是否保证始终为真?
CharSequence x;
String y;
y = x.toString();
if (x.length() == y.length()) // will this ALWAYS be true? (e.g. unicode, MLP, etc)
答案 0 :(得分:2)
由于一个原因无法保证:CharSequence
是interface
。它没有length()
方法的实现,只有它的声明。所以任何人都可以按照他想要的方式实现它。所以我可以创建一个课程MyCharSequence implements CharSequence
并实施length
方法return 10
总是
答案 1 :(得分:1)
CharSequence.toString
中的方法声明提到答案:
String toString()
返回一个字符串,其中包含此序列中的字符 与此序列相同的顺序。 字符串的长度为 这个序列的长度。
如果正确完成了实现,则返回的String
与length
具有相同的CharSequence
。
当然,如果实现不完全基于接口契约。这不是真的,但这不是CharSequence
的有效实现...... 但是每个API都无法保证这一点。
想象一下List
同样的事情总是返回大小为5,无论添加的元素数量是多少......它没有意义,因为Collection
接口说:
int size()
返回此集合中的元素数。
IMO,Java基于接口和文档,如果你也不信任,你就不能相信实现。
答案 2 :(得分:0)
CharSequence是一个接口,String是实现。如果长度相等或不相等,则取决于CharSequence的实现。对于他们中的大多数人来说,我会说平等是有意义的,但你不能指望它。