Following is my code snippet:
Scanner sc = new Scanner(System.in);
int input = sc.nextInt();
var output = switch (input){
case 1 -> "one";
case 2 -> '2';
case 3 -> 3.14;
default -> 10;
};
System.out.println(output);
Now if I enter 1 as input, it prints "one", for 2 it prints '2', for 3 it prints 3.14 and for the rest it prints 10.
Does this mean datatype of output is decided at runtime according to the return type?

The type of
outputis determined at compile time as something that isSerializable,ComparableandConstable, because that's the closest common ancestor to all of the result.The object assigned to the variable is determined at runtime is one of
String,Character,DoubleorInteger.The actual compile type is
Serializable & Comparable<? extends Serializable & Comparable<?> & Constable> & Constable(My IDE told me that!).