//********************************************************************
// Determine the data type of a primitive variable/literal
//********************************************************************
public class typeOf 
{ 
    public static void main(String[] args) 
    {
        System.out.println("3           is " +  type(3) );
        System.out.println("3L          is " +  type(3L) );
        System.out.println("3F          is " +  type(3F) );
        System.out.println("3.14        is " +  type(3.14) );
        System.out.println("3.14F       is " +  type(3.14F) );
        System.out.println("'3'         is " +  type('3') );
        System.out.println("'a'         is " +  type('a') );
        System.out.println("true        is " +  type(true) );
        System.out.println("sam         is " +  type("sam") );
        System.out.println("sam         is " +  type(new StringBuffer("sam")) );
        System.out.println("args        is " +  type(args) );
        System.out.println("args.length is " +  type(args.length) );

        byte  x = 1;
        short y = 1;
        var   z = 1;
        System.out.println("x           is " +  type(x));
        System.out.println("y           is " +  type(y));
        System.out.println("z           is " +  type(z));
    }

    static Object type(byte    var) {return Byte.TYPE;} 
    static Object type(short   var) {return Short.TYPE;}
    static Object type(int     var) {return Integer.TYPE;}
    static Object type(long    var) {return Long.TYPE;}
    static Object type(float   var) {return Float.TYPE;}
    static Object type(double  var) {return Double.TYPE;} 
    static Object type(boolean var) {return Boolean.TYPE;}                         
    static Object type(char    var) {return Character.TYPE;} 
    static Object type(Object  obj) {return obj == null ? null : obj.getClass();} 
}