We can know object reference is-a test by using instanceof operator. But is there any operator to check primitive types. For example:
byte b = 10;
If you really want to play with literals...
if(Byte.class.isInstance(10)) {
System.out.println("I am an instance of Byte");
}
if(Integer.class.isInstance(10)) {
System.out.println("Ups, I can also act as an instance of Integer");
}
if(false == Float.class.isInstance(10)) {
System.out.println("At least I am not a float or double!");
}
if(false == Byte.class.isInstance(1000)) {
System.out.println("I am too big to be a byte");
}
byte b = 10;
Object B= b;
if (B.getClass() == Byte.class) {
System.out.println("Its a Byte");
}
Note: Byte is final, so instanceof is equivalent to class equality.
Now if you try:
Object ref = 10;
System.out.println(ref.getClass()); //class java.lang.Integer
Object ref = 10.0;
System.out.println(ref.getClass()); //class java.lang.Double
Object ref = 10L;
System.out.println(ref.getClass()); //class java.lang.Long
etc...
Assuming you mean by local variables the primitive will always be automatically wrapped by its wrapper type whenever passed as an object, java.lang.Byte in this case. It's impossible to refer to local variables using reflection so you cannot differentiate between Byte and byte or Integer and int etc.
Object bytePrimitive = (byte) 10;
System.out.println("is a Byte ? " + (bytePrimitive instanceof Byte));
System.out.println("Check class = " + (bytePrimitive.getClass()));
// false because class in this case becomes Byte, not byte.
System.out.println("Primitive = " + (bytePrimitive .getClass().isPrimitive()));
However, if you're talking about fields in classes, then things are different as you can get a handle on actual declared type. You can then use java.lang.Class.isPrimitive() as expected and the type will be byte.class.
public class PrimitiveMadness {
static byte bytePrimitiveField;
static Byte byteWrapperField;
public static void main(String[] args) throws Exception {
System.out.println("Field type = " + PrimitiveMadness.class.getDeclaredField("bytePrimitiveField").getType());
System.out.println("Is a byte = " + (PrimitiveMadness.class.getDeclaredField("bytePrimitiveField").getType() == byte.class));
System.out.println("Is a primitive? = " + PrimitiveMadness.class.getDeclaredField("bytePrimitiveField").getType().isPrimitive());
System.out.println("Wrapper field = " + PrimitiveMadness.class.getDeclaredField("byteWrapperField").getType());
}
}