Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can a local variable with an inferred type be reassigned to a different type?

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.

like image 290
Jacob G. Avatar asked Dec 13 '22 17:12

Jacob G.


2 Answers

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);
like image 106
M A Avatar answered Dec 17 '22 23:12

M A


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.

like image 27
Ousmane D. Avatar answered Dec 18 '22 00:12

Ousmane D.