Type checking is the stage of parsing that a compiler (or interpreter) passes through in order to ensure that data types are all being used correctly and consistently. That is, all assignments are being made correctly, functions are being passed arguments of the correct type, comparisons are only done between variables of the same time, etc. Languages like Perl and C are not very strict about this, wheras languages like Java and SML are.