java - 具有不同 "element type"(定义不相等)的 CharBuffer 对象是什么?

标签 java equals charbuffer

CharBuffer 的 equals() 方法非常棘手。

来自here我发现它对以下 block 进行逐个字符(或逐个元素???)比较:来自(起始)位置(由 position() 返回)包含到 limit() 排除。 两个 CharBuffer 中的 equals() 方法根本不会分析容量以及位置之前和限制之后的任何内容

但是短语“相同元素类型”和“...元素...逐点”击败我。

Two char buffers are equal if, and only if,

They have the same element type,

They have the same number of remaining elements, and

The two sequences of remaining elements, considered independently of their starting positions, are pointwise equal.

我还缺少什么?什么是元素类型? CharBuffer 里面不总是 char 吗?

附注根据实现代码(Java SE8),实际上 equals(obj) 中没有进行(元素)类型检查 - 仅进行标准检查 if (obj instanceof CharBuffer)。所以 API 中的这句话只是为了将来的一些实现或者我不知道什么。或者也许“相同的元素类型”只是意味着 equals(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

最佳答案

不,具有不同元素类型的两个 CharBuffer 实例的示例是不可能的。令人反感的注释并没有错误,但可以从 CharBuffer 的元素类型始终为 char 的事实推断出,它可能被视为多余。

我只能推测,但这个评论可能是为了澄清 ByteBuffer 不能相等,即使它的内容可以被视为 char (通过getChar()putChar()asCharBuffer() 方法)。

关于java - 具有不同 "element type"(定义不相等)的 CharBuffer 对象是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54028514/

相关文章:

java - 如何在java中提取.war文件? ZIP 与 JAR

java - 在Java中将原始类型数组转换为对象数组

Javascript == 运算符无法按预期工作?

java - 为什么对象不相同添加到具有相同值的hashset,甚至hashCode和equals被覆盖

Java 集合 - 重写 equals 和 hashCode

java - 如果我们在 `CharBuffer` 或 `Buffer` 中没有任何相应的 (allocateDirect) 方法,我们如何分配直接 CharBuffer ?

java - 使用 java.util.TimeZone 查找 DST 转换时间戳

java - SparkJava Web浏览器下载html文件而不是在部署war文件时显示