Search code examples
javaswitch-statementreturn-typejava-10yield-return

Java switch case statement is returning different type of values(different data-type) and is assigned to same variable of type var


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?


Solution

  • The type of output is determined at compile time as something that is Serializable, Comparable and Constable, 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, Double or Integer.


    The actual compile type is Serializable & Comparable<? extends Serializable & Comparable<?> & Constable> & Constable (My IDE told me that!).