Порівняння StringBuilder за значенням
Усередині класу String метод equals перевизначений, тому можна порівнювати рядки за значенням за допомогою equals, а в класі StringBuilder немає. Тому, за значенням перевіряють так:
1
2
3
4
5
| StringBuilder sb = new StringBuilder(); sb.append( "test" ); StringBuilder sb2 = new StringBuilder(); sb2.append( "test" ); System.out.println(sb.toString().equals(sb2.toString())); |
Тобто призводять StringBuilder до рядка (метод toString) і викликають метод equals.
Спершу ще раз торкнемося теми посилань. Розберемо простий приклад порівняння двох масивів:
int[] a = { 1, 2 };int[] b = { 1, 2 };println("a==b is " + (a == b)); // порівнює ссилкиprintln("a.equals(b) is " + a.equals(b)); // порівнює ссилки
Хоча вміст масивів a і b один, але якщо ми просто порівняємо a == b, то результатом буде false, оскільки в даному випадку відбудеться порівняння посилань, які будуть різними, тому що вказують на різні об'єкти. Метод equals існує для багатьох класів Java і як правило він порівнює вміст цих об'єктів, але для масивів він чомусь теж порівнює посилання.
Для порівняння одновимірних масивів існує метод Arrays.equals, який порівнює вміст масивів. Для порівняння багатовимірних масивів є метод Arrays.deepEquals.
Метод
Arrays.equals(a, b)
в результаті порівняння масивів а й b видає true.
Дана програма може генерувати наступний висновок:
У рядку 9 відбувається виклик методу varArgs, без аргументу змінної довжини, тобто він відсутній.
У рядку 10 у varargs переданий один аргумент, а в рядку 12 три.
Так само, як бачите, як аргумент varargs можна передавати і одновимірний масив (рядок 15).
У varargs можна передати і багатовимірний масив, але з нього буде взято тільки перший вимір - перший індекс.