При написании модульных тестов для функции, возвращающей boolean
две String
секунды, мне нужно было проверить каждый символ алфавита ( 'a'
- 'z'
) последовательно как один из параметров, один за другим, поэтому я написал это для этого:
for(char c = 'a'; c <= 'z'; c++)
{
assertTrue(MyClass.MyFunction(testSubject, new String(c));
}
Я бы подумал, что это допустимо, но это не так, поэтому я просто сделал это так:
for(char c = 'a'; c <= 'z'; c++)
{
assertTrue(MyClass.MyFunction(testSubject, ((Character) c).toString());
}
Является ли это надежный способ преобразовать char
к String
в Java? Это предпочтительный способ? Я не очень много знаю о Java, поэтому хотел бы получить разъяснения по этому поводу.
IntStream.range(0, 26).mapToObj(i -> Character.toString((char) ('a' + i))).forEach(x -> assertTrue(MyClass.MyFunction(testSubject, x)));
IntStream.rangeClosed('a', 'z')
?String
конструктор, который не существует? Поправьте меня, если я ошибаюсь, но, насколько мне известно, в классе нет конструктора,String
который принимает одинchar
аргумент. Обратите внимание, чтоchar
это не то же самое, чтоchar[]
.Ответы:
Самое короткое решение:
Самые чистые (и, вероятно, наиболее эффективные 1 ) решения:
По сравнению с вашим подходом, вышеописанное предотвращает накладные расходы, связанные с упаковкой примитива в
Character
объект.1 Небольшая неэффективность конкатенации строк в первом подходе может быть оптимизирована компилятором или средой выполнения, поэтому один (если бы он был так склонен) действительно должен был бы запустить микропроцессор для определения фактической производительности. Подобные микрооптимизации редко стоят усилий, и использование конкатенации для принудительного преобразования строк выглядит не очень хорошо.
источник
javac
компилятор Sun автоматически трансформируетсяString s = "" + c;
вString s = String.valueOf(c);
, поэтому производительность будет такой же.