Given this case:
String String = ""; //valid
Why is this valid?
Also, why is it that:
int int = 0; // is invalid
I'm baffled.
int is a reserved keyword. Reserved keywords may not be used as part of any formal variable name - the same is true of true, false, and null as literals. There's a list of those such keywords available.
String is a class name and cannot be a reserved keyword. This is because you cannot predict what the name of a class will be in general.
By convention, reserved keywords are lower case, variable names are camelCased, and classes are TitleCased. Following these conventions will ensure that your code doesn't run into these simple errors.
Reserved words can't be used in variable names.
List of reserved words:
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
Same goes for class names.