send
Grupo de Telegram
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Reto Java - Para probar un poco los conocimientos

  • 5 Respuestas
  • 2144 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ~ Yoya ~

  • *
  • Underc0der
  • Mensajes: 150
  • Actividad:
    1.67%
  • Reputación 0
    • Ver Perfil
    • Email
« en: Julio 26, 2013, 01:38:20 am »
Dado el codigo de abajo, explicar porque retorna true o false, en cada caso.

Código: Java
  1. public class xD {
  2.     public static void main(You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login[] args) {
  3.  
  4.         You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login a1 = 600;
  5.         You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login a2 = 600;
  6.  
  7.         You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login b1 = 100;
  8.         You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login b2 = 100;
  9.  
  10.         You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login a = "hola";
  11.  
  12.         StringBuilder strB = new StringBuilder("hola");
  13.  
  14.         You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login.out.println(new You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login(5) == new You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login(5)); // false
  15.         You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login.out.println(a1 == a2);// false
  16.         You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login.out.println(b1 == b2); //true
  17.         You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login.out.println(a.equals("hola")); //true
  18.         You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login.out.println(strB.equals("hola")); // false
  19.  
  20.     }
  21. }

Salida:

Citar
false
false
true
true
false

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Desconectado Arkangel

  • *
  • Underc0der
  • Mensajes: 15
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #1 en: Julio 27, 2013, 05:40:41 pm »
Pues vamos alla:

1) estas haciendo new y comparando las referencias de los objetos, por lo tanto da false porque son diferentes objetos
2) Aqui pasa igual, porque integer es un tipo objeto y se hace una conversion, y si no usas ecual comparas referencias
3) Aqui pasa como el anterior, pero segun el debunger. se le a asignado el mismo objeto (Ni idea de porque aqui pasa esto)
4) al usar equal estas comparando el contenido de los objetos y por lo tanto da el valor true deseado
5) Aqui da false porque stringBuilder no sobrescribe el metodo equal y por lo tanto se llama al que se ereda de object que devuelve siempre false

Saludos

Desconectado 16BITBoy

  • *
  • Underc0der
  • Mensajes: 1
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #2 en: Julio 27, 2013, 05:57:10 pm »
1 - Comparas dos objetos, no los valores de ambos. Esto son dos "hashes" distintos (no confundir con direcciones de memoria).
2 - Exactamente lo mismo que lo anterior, la unica diferencia es que no lo estamos creando en el mismo momento, estos dos objetos se crearon antes.
3 - Se hace exactamente lo mismo, en este caso devuelve true. Depende de la implementación de la maquina virtual, supongo que la jvm parece estar usando el mismo objeto para ciertos valores coincidentes, luego no tiene por que ser así. Desconozco el criterio exacto por el cual puede dar true o no, pero si declaras Integer a1 = 1; e Integer a2 = 1; parece lógico que la jvm cree dos referencias y un solo objeto para "optimizar" un poco ya que se almacena el mismo valor. Esto no quiere decir que siempre vaya a ser así.
4 - La implementación de String.equals() compara el valor contenido por el objeto string con el literal o con el objeto que le pases como argumento. El valor evidentemente da true.
5 - StringBuilder usa el método equals() de la clase object. Esto es, objeto1 == objeto2 <==> objeto1.equals(objeto2) para las instancias de la clase Object y de todas aquellas clases que no sobreescriban el método equals() de la clase Object.

Desconectado ~ Yoya ~

  • *
  • Underc0der
  • Mensajes: 150
  • Actividad:
    1.67%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #3 en: Julio 28, 2013, 01:25:44 pm »
Gracias por la participación chicos, por lo comentarios, veo que tanto Arkangel, como 16BITBoy, tienen buen conocimiento de java. La respuesta incorrectas, no la responderé ahora por si alguien llega a responderla.


@Arkangel,

1 - Exacto
2 -  Falso, recuerda que cuando se utilizas Wrapper para comparar utilizando el operador relacional ==, estos se convierte en sus datos primitivos para realizar la comparación, pero hay algunas excepciones, hay es donde esta la clave. Por otro lado haz acertado que se debe utilizar equal para verificar la igualdad y es lo recomendado, pero no es la respuesta a la pregunta.
3 - Como no estas seguro, te digo que al unico objeto que se le asigna la misma direccion de referencia cuando se declara, es al objeto String siempre y cuando el valor que le hayas dado sea literal y no sea directamente instanciando el objeto String y pasandole el valor al constructor.
3 - Correcto, La clase String sobre-escribe el método equal y también el método hashCode. Recordando que para que un objeto sea considerado igual a otro, este debe también tener el mismo hashCode.
4 - Correcto, StringBuilder no sobre-escribe el método equal, y tampoco el método hashCode.

Buenas respuesta @Arkangel, ya que también haz utilizado los términos correcto y eso significa que conoces bien el lenguaje y no solo su sintaxis.


@16BITBoy,

1 - Correcto, ya que son distintos hashes, en la comparación el resultado es falso. Pero en realdad estas comparando los valores de los objectos y esos valores son la referencia de los objetos.
2 - Falso, en este caso hay algo diferente, una excepción en el comportamiento de la JVM.
3 - Como no conoces el criterio exacto, mejor obviamos la respuesta por si luego quieres responderla.
4 - Correcto compañero
5 - Correcto, no hay nada que agregar solo que tampoco sobre-escribe el metodo hashCode.

Buena participación @16BITBoy, me gusto mucho tu ultima respuesta, ya que describiste como funcionaba internamente el comportamiento, ese tipo de respuesta son la que me gusta ya que muchos saben codear pero no todos conocen verdaderamente el lenguaje que utilizan.


Saludos chicos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Desconectado Arkangel

  • *
  • Underc0der
  • Mensajes: 15
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #4 en: Julio 29, 2013, 10:55:36 am »
pues yo considero que en java para tipos no primitivos hacer esto:
Código: Java
  1. You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login a1 = 600;
  2.  
es lo mismo que hacer
Código: Java
  1. You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login a1 = new You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login(600);
  2.  
Porque cuando usas dato no primitivo, se crea un objeto para este y por lo tanto es como hacer un new. y como esto los convierte en punteros a objetos. el == es exactamente lo mismo en los dos casos. una comparación para ver si es el mismo objeto

Saludos

Desconectado ~ Yoya ~

  • *
  • Underc0der
  • Mensajes: 150
  • Actividad:
    1.67%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #5 en: Agosto 03, 2013, 12:01:59 am »
Por lo visto como nadie ha constetado correctamente la 2º y la 3º pregunta, la contesto.

2 - El resultado es falso, ya que cuando se declara un Integer y se le asigna un valor literal (sin hacer una instanciacion) y se compara  utilizando el operador relacional (==) con otro Integer con el mismo valor (declarado literalmente), dara verdadero siempre y cuando el valor no pase de 127. En este caso el valor sobre-pasa los 127, por tal razón el resultado es falso.

3 - Verdadero, basado en la información de la respuesta 2.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

 

¿Te gustó el post? COMPARTILO!



Hacker Experience: otro juego para ser un black hat sin ir a la carcel.

Iniciado por Theraritho5

Respuestas: 10
Vistas: 3803
Último mensaje Diciembre 03, 2014, 09:48:09 am
por blackdrake
10 mejores recursos para practicar

Iniciado por d0r127

Respuestas: 9
Vistas: 5123
Último mensaje Octubre 16, 2017, 03:08:40 am
por DuendeSlayeR
Para los amantes de los wargames

Iniciado por D3ivid

Respuestas: 1
Vistas: 1600
Último mensaje Julio 03, 2015, 04:19:30 am
por D4rkC0d3r
Reto "Crackea el Menú"

Iniciado por Zekro

Respuestas: 2
Vistas: 1582
Último mensaje Noviembre 29, 2012, 05:57:24 pm
por Zekro
[Solucionario] Reto "Descubre la frase"

Iniciado por q3rv0

Respuestas: 10
Vistas: 3739
Último mensaje Agosto 13, 2012, 04:24:40 pm
por hdbreaker