Foros del Web » Programación para mayores de 30 ;) » Java »

se puede comparar un primitivo con un object

Estas en el tema de se puede comparar un primitivo con un object en el foro de Java en Foros del Web. hola miren, lei en varias veces que no se pueden comparar datso en variables de tipo primitico, con propiedades de objetos, en este caso si ...
  #1 (permalink)  
Antiguo 27/03/2014, 08:14
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 1 mes
Puntos: 3
se puede comparar un primitivo con un object

hola miren, lei en varias veces que no se pueden comparar datso en variables de tipo primitico, con propiedades de objetos, en este caso si se puede...

por ejemplo tengo esto

Código PHP:
        
        preguntas2 hh
=new preguntas2();
        
hh.set_frase("Hoy es jueves y llueve");
        
        
        if(
frase2==preguntas2.frase){
            
System.out.println("son iguales");
            
        }else{
            
            
System.out.println("no se puede comparar...");
        } 

y en la clase, que instancia tengo esto...


Código PHP:

public class preguntas2 {

    public static 
String frase;
    
    public 
preguntas2(){}
    
    
    public 
void set_frase(String contenido){
        
frase=contenido;
    }
    
    public 
String get_frase(){
        return 
frase;
    } 

el tema es que puedo comparar.. valores.. no era necesario el metodo equals...
  #2 (permalink)  
Antiguo 27/03/2014, 09:16
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 1 mes
Puntos: 3
Respuesta: se puede comparar un primitivo con un object

ahh,, ya entendi, esto sirve para comparar objetos individuales, (integer,string,etc)

no objetos, instancia de clases.. (seguramente accediendo por el punto..)
  #3 (permalink)  
Antiguo 31/03/2014, 04:34
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: se puede comparar un primitivo con un object

equals sirve para comparar objetos
== para tipos primitivos

El String no es un tipo primitivo, por eso == no te funciona
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #4 (permalink)  
Antiguo 31/03/2014, 08:06
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 1 mes
Puntos: 3
Respuesta: se puede comparar un primitivo con un object

no no no...
en este caso, comparo dos objetos.. como ven
una clase tiene esto.... y hace instancia de otra clase...

Código Java:
Ver original
  1. String frase2="Hoy es jueves y llueve";
  2.        
  3.        preguntas2 hh=new preguntas2();
  4.        hh.set_frase("Hoy es jueves y llueve");
  5.        
  6.        
  7.        if(frase2==preguntas2.frase){
  8.            System.out.println("son iguales");
  9.            
  10.        }else{
  11.            
  12.            System.out.println("no se puede comparar...");
  13.        }

la clase que instancia esta arriba
ESTO IMPRIME .. "SON IGUALES"

Cita:
compara un string con un elemento de un objeto -que es un string- PERO LOS COMPARA CON SIGNO IGUAL
  #5 (permalink)  
Antiguo 31/03/2014, 08:13
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: se puede comparar un primitivo con un object

y si en vez de

String frase2="Hoy es jueves y llueve";

pones

String frase2="Hoy es lunes y hace sol";

qué resultado te sale? :D
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #6 (permalink)  
Antiguo 31/03/2014, 08:21
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: se puede comparar un primitivo con un object

Hola:

El compilador de java es demasiado listo, hace que dos cadenas declaradas así "hoy es jueves y llueve", ocupen la misma zona de memoria, por lo que el == te dará true, puesto que el compilador ha creado un solo String.

Si en vez de variable="hoy es jueves y llueve", haces variable=new String("hoy es jueves y llueve") posiblemente te de que no son iguales, aunque el texto sea el mismo.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 31/03/2014, 08:40
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 1 mes
Puntos: 3
Respuesta: se puede comparar un primitivo con un object

Cita:
Iniciado por Fuzzylog Ver Mensaje
y si en vez de

String frase2="Hoy es jueves y llueve";

pones

String frase2="Hoy es lunes y hace sol";

qué resultado te sale? :D
imprime "no se puede comparar..."

pero yo digo , si sabe..
que no datos de tipo primitivo,
ya por ser STRING, es un objeto,y tendria que decir algo de "error FATAL - tipo php." pero esta eso de direccion de memoria, y ahora me dicen , que el compilador, mete todo en una posicion de memoria.. esta bien...
es complejo, en estas cosas. que se "aviva".. el compilador..
  #8 (permalink)  
Antiguo 31/03/2014, 08:45
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: se puede comparar un primitivo con un object

hola.

la realidad es

== compara primtivos y también compara que dos objetos sean el mismo (que ocupen la misma direccion de memoria).

equals() compara dos objetos, siempre y cuando el objeto implemente ese método y diga cómo deben compararse esos objetos. Si no lo implementa, se coge el equals() de la clase Object (padre de todas las clases java) y que por defecto hace un ==

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #9 (permalink)  
Antiguo 31/03/2014, 08:46
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 1 mes
Puntos: 3
Respuesta: se puede comparar un primitivo con un object

Aca tenemos otro caso...

Código Java:
Ver original
  1. public class uo {
  2.    public static void main(String[] args) {
  3.    
  4.        preguntas2 hh=new preguntas2();
  5.        hh.set_frase("Hoy es jueves y llueve");
  6.        
  7.        preguntas2 hh3=new preguntas2();
  8.        hh3.set_frase("Hoy es jueves y llueve");
  9.  
  10.        System.out.println(hh.get_frase());
  11.        
  12.        if(hh3.get_frase()==hh.get_frase()){
  13.            System.out.println("son iguales");
  14.            
  15.        }else{
  16.            
  17.            System.out.println("no se puede comparar...");
  18.        }

sigo usando el igual para comparar, 2 elementos de 2 objetos instanciados en objetos distintos.

e imprime "SON IGUALES"

..............
pero aca lei que al ser de instancias distintas, tiene que tirar por el else...

http://chuwiki.chuidiang.org/index.p...denas_de_texto

no entiendo che...
  #10 (permalink)  
Antiguo 31/03/2014, 09:01
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: se puede comparar un primitivo con un object

como te dije en el post anterior, el compilador es listo y crea una sola instancia cuando ve cadenas de texto iguales. Para verificarlo pon

Código Java:
Ver original
  1. preguntas2 hh=new preguntas2();
  2.        hh.set_frase(new String("Hoy es jueves y llueve"));
  3.        
  4.        preguntas2 hh3=new preguntas2();
  5.        hh3.set_frase(new String("Hoy es jueves y llueve"));

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #11 (permalink)  
Antiguo 31/03/2014, 12:06
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 3 meses
Puntos: 57
Respuesta: se puede comparar un primitivo con un object

Una de las razones del porque obtienes que son iguales es que en la clase preguntas2 estas declarando la variable frase como estatica.

Hice algunas modificaciones a tu codigo, ahora hh3 se obtiene del usuario.
Código Java:
Ver original
  1. public static void main(String[] args) {
  2.        
  3.            preguntas2 hh=new preguntas2();
  4.            hh.set_frase("Hoy es jueves y llueve");
  5.            
  6.            System.out.println("hh = " + hh.get_frase());
  7.  
  8.            preguntas2 hh3=new preguntas2();
  9.            //hh3.set_frase("Hoy es jueves y llueve");
  10.            System.out.print("hh3: ");
  11.            hh3.set_frase(new Scanner(System.in).nextLine());
  12.      
  13.            System.out.println("\n hh = " + hh.get_frase());
  14.            System.out.println("hh3 = " + hh3.get_frase());
  15.  
  16.            if(hh3.get_frase()==hh.get_frase())
  17.                System.out.println("son iguales");
  18.            else
  19.                System.out.println("no se puede comparar...");
  20.         }
Haz las pruebas

1. Compila dejando frase como estatica y cuando se pida el valor de hh3, escribe cualquier cosa y ve el resultado
2. Compila quitando el atributo static de la variable frase y escribe cualquier cosa cuando se pida hh3
3. Compila quitando el atributo static de la variable frase y escribe Hoy es jueves y llueve en hh3

Última edición por posman; 31/03/2014 a las 12:13
  #12 (permalink)  
Antiguo 31/03/2014, 12:20
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 1 mes
Puntos: 3
Respuesta: se puede comparar un primitivo con un object

bien...y esto...

Código Java:
Ver original
  1. public class uo {
  2.    public static void main(String[] args) {
  3.        
  4.      
  5.        String cadena1 = new String("Hola");
  6.        String cadena2 = new String("Hola");
  7.            
  8.        if (cadena1 == cadena2)
  9.        {
  10.         System.out.println("iguales");
  11.        }else{
  12.            System.out.println("distintos");
  13.        }
  14.        
  15.        System.out.println("----------------------------");
  16.        
  17.        preguntas2 hh=new preguntas2();
  18.        hh.set_frase("Hoy es jueves y llueve");
  19.        
  20.        
  21.        preguntas2 hh3=new preguntas2();
  22.        hh3.set_frase("Hoy es jueves y llueve");
  23.        
  24.        if(hh3.get_frase()==hh.get_frase()){
  25.            System.out.println("son iguales");
  26.            
  27.        }else{
  28.            
  29.            System.out.println("no se puede comparar...");
  30.        }  
  31.        }
  32. }

por que imprime ....

Cita:
distintos
----------------------------
son iguales

  #13 (permalink)  
Antiguo 31/03/2014, 12:52
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 3 meses
Puntos: 57
Respuesta: se puede comparar un primitivo con un object

La comparacion de las cadenas es correcta. Al utilizar == se compara la posicion en memoria de los objetos asi que los dos objetos String no ocupan el mismo lugar de memoria, aunque tengan la misma cadena (esto es diferente cuando asignas un valor literal a la variable en lugar de crear objetos)

Código Java:
Ver original
  1. String cadena1 = new String("Hola");
  2. String cadena2 = new String("Hola");
  3. String cadena3 = "Hola";
  4. String cadena4 = "Hola";
  5.  
  6. System.out.println("cadena1 == cadena2: " + (cadena1==cadena2 ? "iguales" : "distintos"));
  7. System.out.println("cadena3 == cadena4: " + (cadena3==cadena4 ? "iguales" : "distintos"));
Si sigues utilizando static en la clase preguntas2, borralo. Tambien te recomiendo que hagas las pruebas pidiendo al usuario los valores de las variables. Si asignas los valores dentro del codigo seguramente el compilador hara algunos ajustes para optimizar y obtendras resultados como los que estas obteniendo.

Si utilizo tu codigo, elimino static, y pido el valor de hh3 al usuario obtengo

Código Texto:
Ver original
  1. distintos
  2. -----
  3. no se puede comparar

Te recomiendo que revises un libro de los que se usan para prepararse para la certificacion de Java SE. En esos libros se explican con mayor detenimiento todas estas cosas que estas preguntando

Última edición por posman; 31/03/2014 a las 12:57
  #14 (permalink)  
Antiguo 31/03/2014, 13:17
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 1 mes
Puntos: 3
Respuesta: se puede comparar un primitivo con un object

si

La clase preguntar2 es asi.. sin el STATIC, imprimia eso...

Cita:

distintos
----------------------------
son iguales

Código Java:
Ver original
  1. public class preguntas2 {
  2.  
  3.     public String frase;
  4.    
  5.     public preguntas2(){}
  6.    
  7.    
  8.     public void set_frase(String contenido){
  9.         frase=contenido;
  10.     }
  11.    
  12.     public String get_frase(){
  13.         return frase;
  14.     }
  15. }
  #15 (permalink)  
Antiguo 31/03/2014, 13:37
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: se puede comparar un primitivo con un object

No es tan complicado.

"hola" == "hola" es true
new String("hola") == new String("hola") es false

y el primero es true porque el compilador sólo crea un String para ambos "hola". Luego "adórnalo" pasándolo a un set de una clase o lo que quieras, pero las instancias de String ya están creadas.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #16 (permalink)  
Antiguo 31/03/2014, 13:43
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 1 mes
Puntos: 3
Respuesta: se puede comparar un primitivo con un object

Cita:
Iniciado por chuidiang Ver Mensaje
No es tan complicado.

"hola" == "hola" es true
new String("hola") == new String("hola") es false

y el primero es true porque el compilador sólo crea un String para ambos "hola". Luego "adórnalo" pasándolo a un set de una clase o lo que quieras, pero las instancias de String ya están creadas.

Se bueno.
Código Java:
Ver original
  1. String cadena1 = new String("Hola");
  2.     String cadena2 = new String("Hola");
  3.     String cadena3 = "Hola";
  4.     String cadena4 = "Hola";
  5.      
  6.     System.out.println("cadena1 == cadena2: " + (cadena1==cadena2 ? "iguales" : "distintos"));
  7.     System.out.println("cadena3 == cadena4: " + (cadena3==cadena4 ? "iguales" : "distintos"));

una pregunta en el codigo de arriba.. cadena1 y cadena2, son intancias de objetos...

cadena 3 y 4 tambien son instancias de objetos??...

o se le asigna un valor literal...

HAY STRING DE TIPO PRIMITIVO.. NO ERA QUE POR SER STRING;ERAN TODOS OBJETOS...


2- que libros decis que tiene estas cosas..?
  #17 (permalink)  
Antiguo 31/03/2014, 14:11
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: se puede comparar un primitivo con un object

los cuatro son String. Lo de cadena3="Hola" es una facilidad que te ofrece el compilador para que no tengas que escribir cadena3 = new ("Hola") y ademas el compilador reaprovecha los String que crea él, por lo que cadena3 == cadena4 porque ambos tienen asignado el mismo new String("Hola").

No hay string de tipo primitivo.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #18 (permalink)  
Antiguo 31/03/2014, 14:28
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 1 mes
Puntos: 3
Respuesta: se puede comparar un primitivo con un object

a ver....

vos me decis. que cadena1,cadena2,cadena3 y cadena4

estan declaradas correctamente,como STRING

bien--
------

pero cadena 1 y 2, estan definidas de una manera y cadena 3 y 4
de otra.

las 4 variables tienen el mismo valor...
vos decis. que por que fueron inicializadas de diferentes maneras. se comportan distinto...
(va a ocupar en el primer caso la misma memoria que el otro y etc.)

por lo que comparar con "==" da distinto ...

en el primer caso da "distintos" y en la otra da "iguales"

, SOLO POR QUE FUERON DEFINIDAS DE DIFERENTES MANERAS;
AUNQUE ES LO MISMO . YA QUE EL COMPILADOR.
TRABAJA DE LA MISMA MANERA PERO UNA MANERA DE INSTANCIAR, ES MAS RESUMIDA QUE LA OTRA..¿?
  #19 (permalink)  
Antiguo 31/03/2014, 15:09
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: se puede comparar un primitivo con un object

No tienen el msmo contenido. cadena1 tiene un String que contiene "hola", cadena2 tiene otro String distinto que contiene "hola" y cadena3 y cadena4 contienen ambos un único String que también contiene "hola". Hay cuatro variables y tres String en memoria.

Por eso la comparación correcta de String (de objetos en general) es con equals(), que compara el contenido del String y no si ocupa o no la misma zona de memoria. Si usas ==, según cómo hayas obtenido/creado el String, puede darte true o false.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #20 (permalink)  
Antiguo 01/04/2014, 07:35
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 1 mes
Puntos: 3
Respuesta: se puede comparar un primitivo con un object

bueno, SEGUN como se creo el string, difiere el resultado de la comparacion con "=="

aunque no es lo ideal comparar con el igual, ya que se compara el contenido de la variable.. USAR EQUALS();

-----------------
en cadena 1 y 2.

a esas variables en cada caso, le asigno una direccion de memoria.. creo un objeto y a esas variables le asigno una direccion de memoria, como dije

--------------------

en cadena 3 y 4.

ocurre eso del compilador, que iguala las variable en una sola. que las dos apuntan a la misma direccion, por tener el mismo valor..

espero que sea asi.
PERO bueno , no ocurrira, ya que comparare con el EQUALS()....

que vueltero es JAVA con esto....

Etiquetas: clase, metodo, object, string, valor, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:12.