I remember reading somewhere that local variables with inferred types can be reassigned with values of the same type, which would make sense.
var x = 5;
x =
Once a var
variable has been initialized, you cannot reassign it to a different type as the type has already been inferred.
so, for example this:
var x = 5;
x = 1;
would compile as x
is inferred to be int
and reassigning the value 1
to it is also fine as they're the same type.
on the other hand, something like:
var x = 5;
x = "1";
will not compile as x
is inferred to be int
hence assigning a string
to x
would cause a compilation error.
the same applies to the Scanner
example you've shown, it will fail to compile.
Would not compile, throws "incompatible types: Scanner cannot be converted to int". Local variable type inference does not change the static-typed nature of Java. In other words:
var x = 5;
x = new Scanner(System.in);
is just syntactic sugar for:
int x = 5;
x = new Scanner(System.in);