Mientras escribía las pruebas unitarias para una función booleanque regresa que toma dos Strings, y necesitaba probar cada carácter del alfabeto ( 'a'- 'z') en secuencia como uno de los parámetros, uno por uno, así que escribí esto para hacer eso:
for(char c = 'a'; c <= 'z'; c++)
{
    assertTrue(MyClass.MyFunction(testSubject, new String(c));
} Pensé que esto era permisible, pero no lo era, así que lo hice así:
for(char c = 'a'; c <= 'z'; c++)
{
    assertTrue(MyClass.MyFunction(testSubject, ((Character) c).toString());
} ¿Es este un método confiable para convertir chara a Stringen Java? ¿Es la forma preferida? No sé mucho acerca de Java, por lo que me gustaría una aclaración al respecto.

IntStream.range(0, 26).mapToObj(i -> Character.toString((char) ('a' + i))).forEach(x -> assertTrue(MyClass.MyFunction(testSubject, x)));IntStream.rangeClosed('a', 'z')?Stringconstructor que no existe? Corrígeme si me equivoco, pero que yo sepa, no hay un constructor en claseStringque tome un solocharargumento. Tenga en cuenta quecharno es lo mismo quechar[].Respuestas:
La solución más corta:
Las soluciones más limpias (y probablemente las más eficientes 1 ):
En comparación con su enfoque, lo anterior evita la sobrecarga de tener que encajonar lo primitivo en un
Characterobjeto.1 El compilador o el tiempo de ejecución podrían optimizar la leve ineficiencia de la concatenación de cadenas en el primer enfoque, por lo que uno (si uno estuviera tan inclinado) realmente tendría que ejecutar un micro-punto de referencia para determinar el rendimiento real. Las micro optimizaciones como esta rara vez valen la pena, y confiar en la concatenación para forzar la conversión de cadenas simplemente no se ve muy bien.
fuente
javaccompilador transforma automáticamenteString s = "" + c;enString s = String.valueOf(c);, por lo que el rendimiento sería el mismo.