Задать вопрос
@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 Простой 2 комментария
Решения вопроса 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 - тема отдельной статьи, не поленитесь почитать (к тому же ее любят на собеседованиях).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы