fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Main
  9. {
  10. public static void main (String[] args) throws java.lang.Exception
  11. {
  12. Long L = new Long(7);
  13. int l = 7;
  14. if(L.equals((Integer)l))
  15. System.out.println("Las ls son iguales");
  16. else
  17. System.out.println("Las ls son distintas");
  18.  
  19. /**
  20. * Vamos a desgranar el ejercicio para saber porque imprime
  21. * "Las ls son distintas"
  22. */
  23. System.out.println("----");
  24. System.out.println("int l = " + l);
  25. System.out.println("Long L = " + L);
  26. System.out.println("(Integer)l = " + (Integer)l);
  27. System.out.println("----");
  28.  
  29. /**
  30. * Hasta acá todo bien, al parecer realiza bien el casteo de la variable
  31. * l de int a Long:
  32. * (Integer)l -> sin embargo hay que evitar este tipo de casteo entre
  33. * tipos de datos primitivos y clases.
  34. * Con "instanceof" podemos comprobar si una variable es una instancia de
  35. * algún tipo de dato o clase.
  36. */
  37. System.out.print("El casting de int a Long se realizó bien? ");
  38. System.out.println((Integer)l instanceof Integer);
  39.  
  40. System.out.print("Variable L es del tipo Long? ");
  41. System.out.println(L instanceof Long);
  42.  
  43. System.out.println("----");
  44.  
  45. /**
  46. * Y algunas comprobaciones más usando equals
  47. */
  48. // Comparamos L con un 7: da false.
  49. System.out.print("L.equals(7): ");
  50. System.out.println(L.equals(7));
  51.  
  52. // 7 es un número del tipo entero, para poder comparar L con otro
  53. // número, necesitamos que los dos sean del mismo tipo, es decir, 7
  54. // debe ser del tipo Long.
  55. // Sin embargo,
  56. // esto de abajo está mal. Para convertir un entero (primitivo) a Long (clase)
  57. // hay que hacerlo como aparece más abajo, sino recibiriemos un error.
  58. // System.out.println(L.equals((Long)7));
  59.  
  60. // Forma correcta
  61. System.out.print("L.equals(new Long(7)): ");
  62. System.out.println(L.equals(new Long(7)));
  63.  
  64. System.out.println("----");
  65. /**
  66. * Volviendo al ejercicio: para que nos de true, debemos convertir la
  67. * variable l de int a Long, pero de esta forma:
  68. */
  69. System.out.print("L.equals(new Long(l)): ");
  70. System.out.println(L.equals(new Long(l)));
  71.  
  72. // Además, debe ser sí o sí del tipo Long, no del tipo Integer:
  73. System.out.print("L.equals(new Integer(l)): ");
  74. System.out.println(L.equals(new Integer(l)));
  75.  
  76. /**
  77. * CONCLUSIÓN: creería que la respuesta es la:
  78. * c. Debido a que L es de la clase Long y l se castea a clase Integer
  79. */
  80.  
  81. }
  82. }
Success #stdin #stdout 0.04s 711168KB
stdin
Standard input is empty
stdout
Las ls son distintas
----
int l = 7
Long L = 7
(Integer)l = 7
----
El casting de int a Long se realizó bien? true
Variable L es del tipo Long? true
----
L.equals(7): false
L.equals(new Long(7)): true
----
L.equals(new Long(l)): true
L.equals(new Integer(l)): false