primitivos - tipos de variables en java netbeans
¿Cómo determinar el tipo primitivo de una variable primitiva? (2)
Hay una manera fácil que no requiere el boxeo implícito, por lo que no te confundirás entre los primitivos y sus envoltorios. No se puede usar isInstance
para tipos primitivos; por ejemplo, llamar a Integer.TYPE.isInstance(5)
( Integer.TYPE
es equivalente a int.class
) devolverá false
ya que 5
se autoboxa en un Integer
antemano.
La forma más fácil de obtener lo que desea (tenga en cuenta que técnicamente se realiza en tiempo de compilación para primitivos, pero aún requiere la evaluación del argumento) es a través de la sobrecarga. Ver mi pasta ideone .
...
public static Class<Integer> typeof(final int expr) {
return Integer.TYPE;
}
public static Class<Long> typeof(final long expr) {
return Long.TYPE;
}
...
Esto se puede usar de la siguiente manera, por ejemplo:
System.out.println(typeof(500 * 3 - 2)); /* int */
System.out.println(typeof(50 % 3L)); /* long */
Esto depende de la capacidad del compilador para determinar el tipo de expresión y elegir la sobrecarga correcta.
¿Hay una función tipo "typeof" en Java que devuelve el tipo de una variable de tipo de datos primitivo (PDT) o una expresión de operandos PDT?
instanceof
parece funcionar solo para tipos de clase.
Pruebe lo siguiente:
int i = 20;
float f = 20.2f;
System.out.println(((Object)i).getClass().getName());
System.out.println(((Object)f).getClass().getName());
Se imprimirá:
java.lang.Integer
java.lang.Float
En cuanto a instanceof
, podría usar su homólogo dinámico Class#isInstance
:
Integer.class.isInstance(20); // true
Integer.class.isInstance(20f); // false
Integer.class.isInstance("s"); // false