Вот пример, который возвращает true
для двух буферов разных размеров:
CharBuffer cb1 = CharBuffer.allocate(8);
cb1.put('x'); // moves the current position to 1
cb1.put('x'); // moves the current position to 2
cb1.put(2,'a');
cb1.put(3,'b');
System.out.print(cb1);System.out.println ('|');
CharBuffer cb2 = CharBuffer.allocate(10);
cb2.get (); // moves the current position to 1
cb2.get (); // moves the current position to 2
cb2.get (); // moves the current position to 3
cb2.get (); // moves the current position to 4
cb2.put(4,'a');
cb2.put(5,'b');
System.out.print(cb2);System.out.println ('|');
System.out.println(cb1.equals(cb2));
equals
сравнивает элементы в позициях 2–7 из cb1
с элементами в позициях 4–9 из cb2
и обнаруживает, что они попарно равны (оба содержат следующие char
s - 'а', 'б', 0,0,0,0).
Вы можете видеть, что начальная позиция отличается в двух буферах (2 против 4), но последовательности оставшихся элементов одинаковы.
0 1 2 3 4 5 6 7 8 9
cb1 'x' 'x' 'a' 'b' 0 0 0 0
^
cb2 0 0 0 0 'a' 'b' 0 0 0 0
^
Когда вы начинаете сравнивать последовательности из начальной позиции, вы получаете две идентичные последовательности.
В вашем примере вы сравниваете последовательность 0,0,0,0,0,0,0,0 (последовательность оставшихся элементов начинается с позиции 2) с последовательностью 0,0,0,0, ' a ',' b ', 0,0,0,0 (последовательность оставшихся элементов начинается с позиции 0). Понятно, что они не равны друг другу.