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 = 1; // Should compile, no?
However, I'm curious what would happen if you were to reassign x
to an object of a different type. Would something like this still compile?
var x = 5;
x = new Scanner(System.in); // What happens?
I'm currently not able to install an early release of JDK 10, and did not want to wait until tomorrow to find out.
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:
would compile as
x
is inferred to beint
and reassigning the value1
to it is also fine as they're the same type.on the other hand, something like:
will not compile as
x
is inferred to beint
hence assigning astring
tox
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:
is just syntactic sugar for: