Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

479
Visualizações
Cómo evitar el "aviso: 'StringBuilder sb' se puede reemplazar con 'String'" en intellij-idea

cuando uso el IDE - "IDEA 14.03", siempre me da este aviso. aviso: 'StringBuilder sb' se puede reemplazar con 'String'

Aquí están los detalles, cuando defino un objeto llamado "sb", y la clase de objeto es "StringBuilder". Aquí hay un fragmento de código que probé:

 StringBuilder sb = new StringBuilder("status=").append(status).append(" ,msg=").append(msg); System.out.println(sb);

Solo quiero saber cuáles son los beneficios si cambio el "StringBuilder" a "String". ¿Y por qué el IDE siempre me notifica que cambie el tipo de clase?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Creo que para comprender por qué su IDE le dice que cambie StringBuilder a String, debe comprender las diferencias entre String, StringBuffer y StringBuilder.

La cadena es inmutable. Eso significa que si desea cambiar algo de su cadena, la cadena original no se eliminará sino que se creará una nueva, que incluye sus cambios. StringBuffer y StringBuilder son mutables. Eso significa que con sus cambios, la cadena original se cambiará en consecuencia.

La otra diferencia principal entre ellos es que String y StringBuffer son seguros para subprocesos, mientras que StringBuilder no lo es. También hay otras diferencias, eche un vistazo a este sitio para obtener más información sobre las diferencias.

Si compara String con StringBuilder, en la mayoría de los casos, usar String es más práctico y lógico, si no sabe, qué hace con su cadena.

No siempre es mejor concatenar cadenas con el signo más (+). Por ejemplo, el método de adición de StringBuilder es más lógico si cambia su cadena en un bucle debido a su mutabilidad. Lea los comentarios en el código;

 String a; StringBuilder b; for(int i=0; i<5; i++) { a += i; //String is immutable and in each iteration, a new object will be created b.append(i); //StringBuilder is mutable and in each iteration, the existing string will be used. }

Lo que hace su IDE es simplemente mostrarle las mejores prácticas. Por eso, se llama como recomendación.

Si quiere seguir su camino de todos modos y no quiere que Intellij le advierta al respecto; puede desactivar la advertencia como;

ingrese la descripción de la imagen aquí

EDITAR

Es importante tener en cuenta el comentario de @CrazyCoder aquí.

IDE es realmente muy inteligente aquí, sugiere que lo cambie para una mejor legibilidad del código, ya que el compilador interno generará exactamente el mismo código de bytes y su código tendrá el mismo rendimiento y el mismo uso de memoria, pero será más fácil de leer. Obtiene un beneficio de legibilidad sin comprometer el rendimiento. Se hizo una pregunta similar y se respondió en el foro IntelliJ IDEA hace algún tiempo.

over 4 years ago · Santiago Trujillo Relatório

0

Sé que es una pregunta antigua que ya se respondió con una muy buena respuesta, pero solo un pequeño comentario no relacionado: en tales casos, en aras de la legibilidad (y dado que el compilador hace lo mismo de todos modos como lo mencionó Ad) usaría String .formato. en vez de

 StringBuilder sb = new StringBuilder("status=").append(status).append(" ,msg=").append(msg);

Encuentro esto más legible:

 String.format("status=%s, msg=%s", status, msg);
over 4 years ago · Santiago Trujillo Relatório

0

Aunque el código es más fácil de leer con la concatenación de cadenas, para Java 8 y versiones anteriores, esto se implementa con un StringBuilder, por lo que, en la superficie, parece que solo se está lastimando.

Sin embargo, StringBuilder tiene una capacidad predeterminada de 16. Si profundiza en el código fuente de StringBuilder, verá que la realloc utiliza:

 int newCapacity = (value.length << 1) + 2;

Entonces, básicamente duplicas cada vez. Entonces, para una cadena arbitraria de longitud, digamos 100, terminará asignando espacio y copiando 4 veces con capacidades de 16, 32, 64 y finalmente 128.

Sin embargo, podrías hacer algo como:

 new StringBuffer(128).sb.append("status=").append(status).append(" ,msg=").append(msg).toString();

Y se ha ahorrado 3 asignaciones y copias de matrices.

Según tengo entendido, Java 9+ tiene una solución mucho mejor. Entonces, sabiendo que esto se solucionará, generalmente uso Strings a menos que sepa que el rendimiento es una preocupación y luego revierto el StringBuilder. Este es definitivamente el caso si está trabajando en sistemas integrados o Android, ya que los recursos son escasos. En un servidor en la nube, no tanto.

En cuanto al inspector de IntelliJ, lo apagué, pero generalmente agrego una etiqueta JAVA10 en un comentario, para poder encontrarlos más tarde y revertirlos cuando migremos a 10. Tal vez, solo necesito recordar volver a habilitar el inspector en su lugar. :)

PD: Me gusta la respuesta de Udi. Veré la implementación.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda