Enquanto escrevia testes de unidade para uma função boolean
que retorna dois String
segundos, e eu precisava testar todos os caracteres do alfabeto ( 'a'
- 'z'
) em sequência como um dos parâmetros, um por um, então escrevi isso para fazer isso:
for(char c = 'a'; c <= 'z'; c++)
{
assertTrue(MyClass.MyFunction(testSubject, new String(c));
}
Eu teria pensado que isso era permitido, mas não era, então eu fiz assim:
for(char c = 'a'; c <= 'z'; c++)
{
assertTrue(MyClass.MyFunction(testSubject, ((Character) c).toString());
}
Este é um método confiável para converter um char
para um String
em Java? É o caminho preferido? Eu não sei muito sobre Java, então gostaria de alguns esclarecimentos sobre isso.
IntStream.range(0, 26).mapToObj(i -> Character.toString((char) ('a' + i))).forEach(x -> assertTrue(MyClass.MyFunction(testSubject, x)));
IntStream.rangeClosed('a', 'z')
?String
construtor que não existe? Corrija-me se estiver errado, mas até onde sei, não há construtor na classeString
que use um únicochar
argumento. Observe quechar
não é o mesmo quechar[]
.Respostas:
A solução mais curta:
As soluções mais limpas (e provavelmente mais eficientes 1 ):
Comparado à sua abordagem, o acima evita a sobrecarga de colocar o primitivo em um
Character
objeto.1 A leve ineficiência da concatenação de strings na primeira abordagem pode ser otimizada pelo compilador ou pelo tempo de execução; portanto, um (se um deles estiver muito inclinado) precisaria realmente executar uma micro-referência para determinar o desempenho real. Micro-otimizações como essa raramente valem o esforço, e confiar na concatenação para forçar a conversão de strings simplesmente não parece muito bom.
fonte
javac
compilador transforma automaticamenteString s = "" + c;
emString s = String.valueOf(c);
, de modo que o desempenho seria o mesmo.