Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

304
Views
¿Es seguro usar !=/== con Character?

¿Es seguro usar ==/!= al comparar Character ?

Siendo el carácter un tipo en caja, ¿es seguro usar ==/!= al comparar tipos de caracteres?

 public static void main(String[] args) { Character c1 = 'd'; Character c2 = (char) getInt(); System.out.println(c1 == c2); } public static int getInt() { return 100; }

Lo siguiente funciona como se esperaba (verdadero). Sin embargo, ¿hay casos en los que comparar Carácter con el mismo valor usando == daría lugar a falso? (Por lo tanto, ¿tenemos que usar '.equals()' al comparar tipos primitivos en caja?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

No, no es seguro. Debes usar equals() .

Demostración:

 System.out.println(Character.valueOf('Ü') == Character.valueOf('Ü')); // -> false

Tenga en cuenta que si usa autoboxing o Character.valueOf() , algunos caracteres (caracteres ASCII) se almacenan en caché y se reutiliza la misma instancia de Character , por lo que == puede devolver true para el mismo valor:

 System.out.println(Character.valueOf('A') == Character.valueOf('A')); // -> true (on my machine)

Pero no funciona para todos los caracteres, y no funcionará si llama explícitamente al new Character(...) .

over 4 years ago · Santiago Trujillo Report

0

tl; dr

Use puntos de código, no char / Character .

 "d".codePointAt( 0 ) == 100 // true.

Detalles

La respuesta de Alex Shesterov es correcta. Pero en general, no deberías usar objetos de Character .

Character está roto

La clase Character es una clase contenedora para el tipo primitivo char . El tipo char / Character es heredado a partir de Java 2 y está esencialmente roto. Como valor de 16 bits, es físicamente incapaz de representar la mayoría de los caracteres .

Por ejemplo, intente ejecutar:

 System.out.println( Character.valueOf( '😷' ) ) ;

Puntos de código

En su lugar, cuando trabaje con caracteres individuales, utilice números enteros de punto de código . En Java eso significa usar el tipo int / Integer .

Si observa clases como String , StringBuilder y Character , encontrará métodos codePoint .

Revisemos su fragmento de código. Cambiaremos los nombres para que sean más descriptivos. char el uso de Character y caracteres por meros enteros primitivos int . Como tal, podemos comparar nuestros valores int usando == o != .

 package work.basil.text; public class App7 { public static void main ( String[] args ) { int codePointOf_LATIN_SMALL_LETTER_D = "d".codePointAt( 0 ); // Annoying zero-based index counting, not ordinal. int codePoint2 = getInt(); boolean sameCharacter = ( codePointOf_LATIN_SMALL_LETTER_D == codePoint2 ); // Comparing `int` primitives with double-equals. System.out.println( sameCharacter ); } public static int getInt () { return 100; // Code point 100 is LATIN SMALL LETTER D, `d`. } }

Cuando se ejecuta:

verdadero

Por supuesto, si usa el encuadre automático o mezcla la clase contenedora Integer con la primitiva int , entonces la misma explicación en esa otra Respuesta también se aplica aquí.

  • Compare el objeto Integer con el objeto Integer llamando a Integer#equals u Objects.equals( Object a , Object b ) en lugar de usar == .
  • Compare int primitivo con int primitivo usando == o llamando a Integer.compare( int x , int y ) .
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!