There are two types of "type" - primitive (e.g. int, char, float. boolean) and objects (e.g string, list, stack) For a full list of objects have a look at
java.sun.com/api - allows you to choose the one that you need.
Yes, you can have variables with the same name AS LONG as they do not collide (i.e. are in different scope and do not exist together), you can have global class and local method variables the same name too