A variable's type cannot change over its lifetime. Nuanced though because most languages support aliasing which can make it appear as if a variable changed type, even though it hasn't; syntactic sugar merely drops the old variable and creates a new one with the same name
Types checked and enforced at runtime
A variable's type can change and, typically, implicit conversions are commonplace
Types checked and enforced at compile time