Al declarar cualquier tipo de datos primitivos como int
o double
se inicializan a 0
o 0.0
. ¿Por qué no podemos configurarlos en null
?Nulo para tipos de datos primitivos
Respuesta
Un tipo primitivo es solo información. Lo que llamamos objetos, por otro lado, son solo indicadores de dónde se almacenan los datos. Por ejemplo:
Integer object = new Integer(3);
int number = 3;
En este caso, object
es sólo un puntero a un objeto entero cuyo valor pasa a ser 3. Es decir, en la posición de memoria donde se almacena el objeto variable, todo lo que tienes es una referencia a donde realmente están los datos La posición de memoria donde se almacena number
, por otro lado, contiene el valor 3 directamente.
Por lo tanto, podría establecer el object
como nulo, pero eso solo significaría que los datos de ese objeto están en nulo (es decir, no están asignados). No puede establecer un int a nulo, porque el lenguaje lo interpretaría como el valor 0.
Espero que ayude!
Porque eso es lo que dice el estándar de lenguaje.
Si desea poder pasar null
, debe usar the wrapper types, p. Ej. Integer
en lugar de int
.
Porque es un tipo primitivo y no un objeto. Puede usar el objeto correspondiente para cada tipo si necesita la capacidad de usar valores nulos (es decir, doble para doble, larga para larga, booleana para booleana, etc.)
Porque los tipos de datos primitivos en Java no son Object
s . Siempre puede usar una de las clases contenedoras para tener un Object
. Cada uno de los ocho tipos de datos primitivos tiene su correspondiente envoltorio:
- bytes:
java.lang.Byte
- corta:
java.lang.Short
- int:
java.lang.Integer
- larga:
java.lang.Long
- float:
java.lang.Float
- doble:
java.lang.Double
- booleano:
java.lang.Boolean
- carbón
java.lang.Character
Si usted está interesado en toda la estructura, puede empezar a here (Primitive Data Types).
Porque null es una referencia. Y los tipos primitivos no son tipos de referencia. Solo los objetos son tipos de referencia.
El lenguaje de programación Java tiene tipado estático, lo que significa que todas las variables deben declararse antes de que puedan ser utilizadas. Esto implica indicar el tipo y nombre de la variable.
Junto con todas las respuestas anteriores, me gustaría añadir este punto también.
Para tipos primitivos, hemos solucionado el tamaño de la memoria, es decir, para int tenemos 4 bytes y char tenemos 2 bytes. Y null se usa solo para objetos porque el tamaño de la memoria no es fijo.
lo que por defecto que tenemos,
int a=0;
y no
int a=null;
mismo con otros tipos primitivos y, por tanto, nula sólo se utiliza para los objetos y no para los tipos primitivos.
Los objetos implican más sobrecarga que primitivos. La siguiente prueba muestra que int se realiza aproximadamente 10 veces más rápido que Integer.
int n;
EtmPoint point1 = etmMonitor.createPoint("test:objects");
for (n = 0; n < 1000000; n++) {
Integer t = 0;
t = 10;
t = 11;
}
point1.collect();
EtmPoint point = etmMonitor.createPoint("test:primitives");
for (n = 0; n < 1000000; n++) {
int t = 0;
t = 10;
t = 11;
}
point.collect();
etmMonitor.render(new SimpleTextRenderer());
Esta es la razón por .NET implementadas primitivas anulables, por desgracia java no tiene primitivas anulables.
Y esta es exactamente la razón de la pregunta. .NET lo implementó hace siglos, y Java está atrasado en este aspecto, desafortunadamente. – Shane
En primer lugar, la diferencia de Primitive y Object Reference es la variable Primitive store the real values, mientras que la variable de referencia object almacena la dirección del objeto al que se refieren, en este caso en referencia de objeto si no hay dirección pasará a "nulo".
Los valores predeterminados del tipo de datos primitivos dependen del tipo de datos primitivos: como byte = 0, short = 0, int = 0, largo = 0L, float = 0.0f, double = 0.0d, boolean = false, char = "\ u0000".
Cuando declaramos una variable de cualquier tipo de clase, se conoce como tipo de datos de referencia.
EX:
t1 Prueba
t2 Test (Tipos Wrapper Object)
entero i
largo l
valores predeterminados referencia de objeto, Jvm inicializa variable de referencia como "nula" y lo hará también inicializar el conjunto a "nulo"
- 1. Tipos de datos primitivos multiplataforma en C++
- 2. TypeConverters roto para tipos primitivos?
- 3. Uso de propiedades para tipos primitivos
- 4. tipos primitivos enumeración - ¿existe
- 5. Java: Arsenal de tipos de datos primitivos no AUTOBOX
- 6. ¿Los miembros de la entidad deberían ser tipos de datos primitivos o tipos de datos Java?
- 7. ¿Hay tipos de datos primitivos en C# atomic (thread safe)?
- 8. Tipos primitivos y contenedores IoC
- 9. Rendimiento: typedef vs clase contenedor para los tipos primitivos?
- 10. Uso de tipos primitivos con ClassLoader
- 11. Uso de tipos primitivos sin firmar
- 12. Rieles ActiveRecord y matriz de tipos primitivos
- 13. Identificación de tipos primitivos en plantillas
- 14. Java Reflexión con los tipos primitivos
- 15. ¿Los punteros son tipos primitivos en C++?
- 16. ¿Los tipos de datos primitivos son seguros para subprocesos en Java
- 17. Propiedades sintetizadas para tipos de datos primitivos que usan ARC: ¿débiles o asignados?
- 18. ¿Cómo se usa getMethod() con tipos primitivos?
- 19. ¿Cómo enviar multimétodo en tipos primitivos?
- 20. NSCode: codificador y decodificador para los tipos primitivos
- 21. isAssignableFrom con referencia y tipos primitivos
- 22. valor predeterminado de "valor" en los tipos primitivos
- 23. ¿Los tipos primitivos son diferentes en Java y C#?
- 24. ¿Se recolectan los tipos primitivos de basura en Android?
- 25. Entity Framework Code First y colecciones de tipos primitivos
- 26. Colecciones de Java. ¿Por qué no hay tipos primitivos?
- 27. ¿Qué tipo de datos primitivos es time_t?
- 28. Cuándo utilizar tipos primitivos y de referencia en Java
- 29. Comportamiento de Java extraño con moldes a tipos primitivos
- 30. ¿Por qué Java Collections no almacena directamente tipos de primitivos?
Supongo que estas mejores prácticas siguen siendo ciertas incluso si Java 8 introdujo primitivas opcionales como OptionalInt? OptionalInt.empty() podría usarse en lugar de un valor nulo. Pero mi entendimiento es que los Opcionales deberían ser tipos de métodos de devolución, y no ser tipos para las propiedades mismas. – tmn