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.
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);
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.
来源:https://stackoverflow.com/questions/49372970/can-a-local-variable-with-an-inferred-type-be-reassigned-to-a-different-type