int cannot be converted to String при создании элемента массива

public class StringSplit {
  public static String[] solution(String s) {
    //Write your code here
    if (s.length()%2==1){
      s = s + '_';
    }
    String[] result = new String[s.length()/2];
    for (int i=0; i<s.length()/2; i++){
      result[i] = s.charAt(i*2) + s.charAt(i*2+1);
    }
    return result;
  }
}

Друзья, подскажите пожалуйста, почему элементы массива не создаются, ошибка int cannot be converted to String и указатель на плюсик, хотя никаких цифр нет. Как только добавляешь "" в начало строки - пропускает (подсмотрел в решении). Вот так работает:

result[i] = "" + s.charAt(i*2) + s.charAt(i*2+1);

Ответы (3 шт):

Автор решения: had0uken

Потому что при арифметических операциях char неявно приводится к int. И ты соответственно пытаешься записать в переменную типа Стринг значение int. Значением int арифметическая операция перестанет быть, как только ты туда передашь какое-то значение Стринг. Допустим: " ". Тогда это уже будет конкатенация строк, а не арифметическое сложение и ты получишь Стринг. Для максимальной наглядности:

System.out.println(5 + 5 + 5); // На выходе: 15
System.out.println("" + 5 + 5 + 5);  // На выходе 555     "" - это пустая строка
→ Ссылка
Автор решения: Арт

Спасибо, а какой еще есть способ конкатенации букв? Добавлять "" выглядит как костыль и додуматься самому до этого решения нереально, а это новичковая задача (7 kata). Почему вообще язык со строгой типизацией допускает что String.charAt(N) может быть цифрой?

→ Ссылка
Автор решения: had0uken

Преобразование типов введено в язык, чтобы использовать в одном выражении различные типы данных. И соответственно были введены правила преобразования данных, с идеей, что в выражении все данные должны быть приведены до одного типа. Согласно которым данные типа byte и char приводятся к int, для выполнения операций.

Насколько я знаю, лучший способ это использование StringBuilder для конкатенации строк. Объекты в Java бывают изменяемые и неизменяемые. Объекты типа String - неизменяемые. То есть при конкатенации строк, строка не меняется, а создается новая. То есть при множественной конкатенации создается куча объектов типа Стринг, что очень ресурсоёмко. При использовании метода append объекта Стригбилдер - новая строка не создается, а редактируется объект типа Стрингбилдер.

→ Ссылка