¿cuál es la diferencia entre typecasting y typeconversion en C++ o java?¿cuál es la diferencia entre typecasting y typeconversion en C++ o java?
Respuesta
Tipo fundición es el tratamiento de un valor (bloque de memoria) referenciado por una variable como siendo de un tipo diferente que el tipo de la variable se declara como.
Tipo conversión actual ejercicio de una conversión de ese valor.
En muchos idiomas, algunos modelos (generalmente los numéricos) dan lugar a conversiones (esto variará bastante según el idioma), pero sobre todo es solo "trata esta X como una Y".
Como la mayoría de los aspectos del lenguaje humano, por desgracia, los términos se usan de forma ligeramente diferente en diferentes comunidades, en su mayoría a lo largo de líneas lingüísticas. Por ejemplo, ver el comentario de James a continuación sobre C++ — La palabra "moldear" tiene un significado mucho más amplio que la definición anterior, que está más en el molde C o Java. Y solo para hacer las cosas divertidas, Java Language Spec realmente entra en varios tipos de moldes, incluido casting conversions. Pero lo anterior es una buena regla empírica.
Sin embargo, para tomar un caso simple:
En Java, antes de los genéricos no era raro tener que hacer un montón de encasillamiento cuando se trata de mapas:
Map m = new HashMap();
m.put("one", "uno");
// This would give a compiler error, because although we know
// we'll get a String back, all the compiler knows is that it's
// an Object
String italian = m.get("one");
// This works, we're telling the compiler "trust me, it's a String"
String italian = (String)m.get("one");
Afortunadamente, la adición de generics se ocupó de esto, ya que la fundición de esta manera tiende a ser un proceso frágil con problemas de mantenimiento.
Por el contrario, se había convertir si has tenido una cadena de dígitos:
String s = "1234";
... y necesita saber qué número de esos dígitos representados en decimal:
// Wrong (cast)
int n = (int)s;
// Right (conversion)
int n = Integer.parseInt(s, 10);
Typecasting es simplemente tomar un bolígrafo y escribir "esto es ahora un int" en la variable, la conversión es en realidad convertir el contenido al tipo deseado por lo que el valor sigue teniendo un sentido.
De acuerdo con la Wikipedia article:
"En la familia de C de los idiomas, el reparto de la palabra por lo general se refiere a un explic escribe conversión (en oposición a una conversión implícita), independientemente de si se trata de una reinterpretación de un patrón de bits o una conversión real."
Aquí es un C++ ejemplo:
double d = 42.0;
int i = d; // Here you have an implicit conversion from double to int
int j = static_cast<int>(d); // Here you have a cast (explicit conversion).
He aquí un ejemplo de Java (tenga en cuenta que en Java a diferencia de C++ no se puede convertir implícitamente de doble a int):
int i = 42;
double d = i; // Here you have an implicit conversion from int to double
int j = (int)d; // Here you have a cast (explicit conversion).
Tipo conversión:.
double value = 3; // implicit conversion to double value 3.0
int nValue = 3.14156; // implicit conversion to integer value 3
casting es una solicitud por el programador para hacer una conversión explícita de tipos
int nValue = 10;
double dvalue = double(nValue); // explicit type casting
Los términos a menudo se usan indistintamente.
Java
Tipo de fundición y conversión de tipos son la misma cosa en Java, aunque si alguien dice que son de fundición, generalmente se refieren a una conversión explícita.
Un lanzamiento en Java se realizará en tiempo de ejecución, por lo que puede fallar (lanzar una excepción). Algunos tipos de conversiones no válidas pueden capturarse en tiempo de compilación. Cuando el molde falla, la instancia se asentó en una referencia object
, por lo que el compilador no pudo decir qué molde se iba a realizar, hasta que realmente ejecutó el código.
C++
Tipo de fundición y conversión de tipo son diferentes en C++. Hay cinco tipos de moldes en C++, que tienen comportamientos diferentes: static_cast
, dynamic_cast
, reinterpret_cast
, const_cast
y moldes de estilo c ((int)someVariable
).
Algunos modelos de C++ realizan conversión de tipo (de ahí la razón por la cual este concepto es confuso), código de llamada y, potencialmente, verificaciones de tiempo de ejecución. Otros moldes de C++ simplemente simulan el cambio de tipo de la variable de referencia: ninguna memoria se modificará, moverá o copiará, por lo que es posible que el tipo de datos resultante no se convierta correctamente. Esto puede dar una gran velocidad en el tiempo de ejecución y puede ser una herramienta poderosa para el código de bajo nivel, pero tiende a evitarse para el código de alto nivel.
Tenga en cuenta que la sintaxis del molde c-style (que se ve exactamente igual que la sintaxis de Java) es uno de los modelos que no necesariamente llamará al código de conversión.
La conversión de tipo en C++ a menudo se refiere a llamar a un constructor de copias u operador de asignación, que copiará los datos a una nueva instancia de una clase/estructura diferente. Si un tipo tiene operadores de conversión definidos, entonces la sintaxis de conversión podría verse como un molde, o simplemente una asignación directa. La principal diferencia aquí es que se llama al código para hacer la conversión.
Tal vez un ejemplo puede ayudar:
- Si lanzas
33
a una cadena, se obtiene"!"
. - Si convierte
33
en una cadena, obtiene"33"
.
[Nota: este ejemplo hace todo tipo de supuestos no-necesariamente-válidas sobre las codificaciones y en memoria representaciones de números y cadenas, pero espero que el mecanismo está claro.]
Sí.Buen ejemplo. – Jagan
de un objeto primitiva a -> Tipo de conversión
String s = "1234";
int i = Integer.parseInt(s);
int j = Integer.valueOf(s);
de una primitiva de objeto -> conversión de tipo
int i = 55;
String s = String.valueOf(i);
String t = Integer.toString(i);
de una primitiva a primitiva (o un objeto a otro) -> conversión de tipos (explícita cuando el estrechamiento e implícita cuando ensanchamiento)
//explicit
double d = 3.14156;
int i = (int)d;
//implicit
int i = 100;
double d = i;
Nota: En caso de tipo de objeto de fundición, que no se puede utilizar la referencia de clase del niño para sostener objeto padre
- 1. ¿Cuál es la diferencia entre '\ n' o "\ n" en C++?
- 2. ¿Cuál es la diferencia entre a.getClass() y A.class en Java?
- 3. ¿Cuál es la diferencia entre java y jsp?
- 4. ¿Cuál es la diferencia entre Visual C++ y C++?
- 5. ¿Cuál es la diferencia entre referencias y objetos en Java?
- 6. ¿Cuál es la diferencia entre interfaz y @interface en java?
- 7. ¿Cuál es la diferencia entre booleano y booleano en Java?
- 8. ¿Cuál es la diferencia entre? y Object en genéricos Java?
- 9. ¿Cuál es la diferencia entre int.class y Integer.TYPE en java?
- 10. ¿Cuál es la diferencia entre Boolean.TRUE y true en Java?
- 11. ¿Cuál es la diferencia entre Collection y List en Java?
- 12. ¿Cuál es la diferencia entre Future y FutureTask en Java?
- 13. ¿Cuál es la diferencia entre + = y = +?
- 14. ¿Cuál es la diferencia entre 'int'? y 'int' en C#?
- 15. ¿Cuál es la diferencia entre C++ administrado y C#?
- 16. ¿Cuál es la diferencia entre scala @Serializable y Java Serializable?
- 17. ¿Cuál es la diferencia entre Managed C++ y C++/CLI?
- 18. ¿Cuál es la diferencia entre C y C incrustado?
- 19. En C# ¿cuál es la diferencia entre ToUpper() y ToUpperInvariant()?
- 20. ¿Cuál es la diferencia entre File y FileInfo en C#?
- 21. ¿Cuál es la diferencia entre Process y ProcessStartInfo en C#?
- 22. ¿Cuál es la diferencia entre printf() y puts() en C?
- 23. ¿cuál es la diferencia entre atan y atan2 en C++?
- 24. Cuál es la diferencia entre memset y memcpy en C
- 25. ¿Cuál es la diferencia entre System.Type y System.RuntimeType en C#?
- 26. ¿Cuál es la diferencia entre strtok_r y strtok_s en C?
- 27. ¿Cuál es la diferencia entre Const y Static en C#?
- 28. Cuál es la diferencia entre & y operadores & en C#
- 29. Objective-C: ¿Cuál es la diferencia entre NULL, nil y @ ""?
- 30. ¿Cuál es la diferencia entre dict() y {}?
¿Podría darme ejemplos para el encasillado y la conversión de tipo? – Jagan
@Jagan: Curiosamente, solo estaba haciendo eso. :-) –
Al menos en C++, el uso del término _cast_ no es tan limitado; hay varios (cuatro) tipos de moldes. La reinterpretación es solo una de ellas y es la que se usa menos comúnmente. –