Страницы

Поиск по вопросам

среда, 1 января 2020 г.

Почему indexOf() возвращает одинаковое значение для двух разных пустых строк?

#java #строки


Почему этот код выводит Index = 0 для b и s? 

import java.util.ArrayList;
public class Arr {
    public static void main(String[] args) {
        ArrayList myList = new ArrayList<>();
        String s = new String();
        myList.add(s);
        String b = new String();
        myList.add(b);

        int idx = myList.indexOf(b);
        System.out.println("Index b=" + idx);
        int idx2 = myList.indexOf(s);
        System.out.println("Index s=" + idx2);
    }
}

    


Ответы

Ответ 1



В методе ArrayList.indexOf() сравнение объектов реализовано следующим образом int indexOf(Object o) { for (int i = 0; i < size(); i++) { if (o == null) { if (get(i) == null) return i; } else { if (o.equals(get(i))) return i; } } return -1; } Т.к переменные a и b представляют собой пустые строки, то a.equals(b) == true Т.е., с точки зрения списка, в списке находятся два идентичных объекта. А значит метод indexOf возвращает индекс первого из них

Комментариев нет:

Отправить комментарий