什么是具有不同“元素类型”(按定义不相等)的CharBuffer对象?

时间:2019-01-03 19:19:31

标签: java equals charbuffer

equals()的{​​{1}}方法非常棘手。

here中我知道,它使 char-by-char 或element-by-element ???) 比较以下块:从(起始)位置(由CharBuffer返回)包括(包括)。完全没有通过equals()方法在两个CharBuffer中分析容量和位置前后的任何内容

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

  

两个char缓冲区等于if, and only if

     

它们具有相同的元素类型

     

它们具有相同数量的剩余元素,并且

     

剩余的两个元素序列,独立于   它们的起始位置逐点相等。

我还想念什么?什么是元素类型?在CharBuffer中不是总是char吗?

P.S。根据实现代码(Java SE8),实际上在equals(obj)内不执行任何(元素)类型检查-仅执行标准检查position()。因此,API中的该短语仅用于将来的实现或不知道什么。也许“相同的元素类型”仅意味着equals(arg)-arg必须是CharBuffer,这很简单。

能否举两个具有不同“元素类型”的CharBuffer对象的示例?

此类CharBuffer对象在定义上不相等。

limit()

2 个答案:

答案 0 :(得分:1)

您的问题非常重要。
如果查看实现,您会发现没有完成与元素类型相关的检查:

public boolean equals(Object ob) {
    if (this == ob) 
        return true;
    if (!(ob instanceof CharBuffer))
        return false;
    CharBuffer that = (CharBuffer)ob;
    if (this.remaining() != that.remaining())
        return false;
    return BufferMismatch.mismatch(this, this.position(),
                                   that, that.position(),
                                   this.remaining()) < 0;
}

关于类型的唯一检查是参数中的对象是CharBuffer的实例。
我们可以注意到的一件有趣的事情是,CharBuffer源自Buffer,但是CharBufferequals()唯一的实例可能相等的方式覆盖了CharBuffer他们之间。
Buffer实现,例如ByteBufferIntBuffer在它们之间是不可互斥的。
根据实现,这可能意味着。
请注意,其他Buffer实现在这一点上具有相似之处:

  

它们具有相同的元素类型

答案 1 :(得分:1)

否,不可能是两个具有不同元素类型的CharBuffer实例的示例。令人反感的评论是没有错的,但是可以从CharBuffer的元素类型始终为char的事实中推断出来,并且可能被认为是多余的。

我只能推测,但是此注释可能是为了澄清ByteBuffer不能相等,即使可以将其内容视为char(通过getChar(),{ {1}}和putChar()方法)。