的equals()
方法CharBuffer
相当棘手。
从这里我知道它对以下块进行逐字符(或逐元素???)比较:从(开始)位置(由返回position()
)包含到limit()
排除。容量和位置之前和限制之后的任何内容都不会在 CharBuffer(s) 中通过 equals() 方法进行分析。
但是短语“相同元素类型”和“......元素......逐点”击败了我。
两个 char 缓冲区相等当且仅当,
它们具有相同的元素类型,
它们具有相同数量的剩余元素,并且
剩余元素的两个序列,独立于它们的起始位置考虑,是逐点相等的。
我还缺少什么?什么是元素类型?CharBuffer 中不总是 char 吗?
PS根据实现代码(Java SE8)实际上没有(元素)类型检查在 equals(obj) 内完成 - 只有标准检查if (obj instanceof CharBuffer)
。所以 API 中的这个短语只是为了一些未来的实现或者我不知道什么。或者也许“相同的元素类型”只是意味着等于(arg) - arg 必须是 CharBuffer,这是微不足道的。
您能否举一个具有不同“元素类型”的两个 CharBuffer 对象的示例?
这样的 CharBuffer 对象在定义上是不相等的。
CharBuffer cb1 = CharBuffer.allocate(10);
cb1.put('0');
cb1.put('a'); // element type - char ?
cb1.put('b');
cb1.rewind();
cb1.limit(7);
System.out.println(cb1);
CharBuffer cb2 = CharBuffer.allocate(11);
cb2.put("0ab"); // element type - String ?
cb2.rewind();
cb2.limit(7);
System.out.println(cb2);
// 0ab = 0ab + same number of "empty positions" until limit
// (don't know how to name "empty positions" correctly)
System.out.println(cb1.equals(cb2)); // TRUE