@NovichokIvanovich
начинающий программист

Почему неправильно считает, сколько раз использовалась буква при чтении из строки в массив?

Код

Scanner sc;
        String[] strArray = {"t", "e", "s", "t", "t","s", "t"}; //Если задать значение сразу то считает правильно
        //    String[] strArray;
        Map<String, Integer> map = new HashMap<String, Integer>();
        int i, j;

//        System.out.println("Введите слово и нажмите Enter");
//        sc = new Scanner(System.in);
//        strArray = sc.nextLine().split("");    Если считать из строки в массив то считает не правильно
        int d = strArray.length;

        for (i = 0; i < d; i++) {
            String b = strArray[i];
            int count = 0;
            for(j = 0; j < d; j++) {
                if (b == strArray[j]) {
                    count++;
                    map.put(b, count);
                }
            }
        }
        System.out.println(map);



Если массив инициализировать сразу, без получения массива через метод Scaner.nextline.split("") то считает правильно иначе неправильно, хотя там так же строковый массив.
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
Две причины:
1. Потому что строки в Java сравниваются методом .equals
2. Потому что Java string pool
В первом случае, когда массив инициализируется "вручную", ваши строки попадают в string pool и, по факту, строки "t", "t", "t" - это один и тот-же объект (так-же как и "s", "s"), и поэтому "t" == "t" // true
В случае, когда вы берете строку и разделяете ее сплитом - получается массив уже разных объектов, хоть и с одним содержанием, которые правильно сравнивать методом .equals

String pool в java - тема отдельной статьи, не поленитесь почитать (к тому же ее любят на собеседованиях).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы