Java > Core Java > Control Flow > Switch-Case Statements
Basic Switch-Case Example
This snippet demonstrates a basic switch-case statement using integer values. It evaluates an integer variable and executes the corresponding code block based on its value.
Code
The `switch` statement evaluates the `dayOfWeek` variable. Each `case` label represents a possible value of `dayOfWeek`. When a `case` matches the value of `dayOfWeek`, the code block associated with that `case` is executed. The `break` statement is crucial; it terminates the `switch` statement after a match is found. Without `break`, execution would 'fall through' to the next `case`. The `default` case is executed if none of the other `case` labels match the value of `dayOfWeek`.
public class SwitchCaseExample {
public static void main(String[] args) {
int dayOfWeek = 3;
switch (dayOfWeek) {
case 1:
System.out.println("Sunday");
break;
case 2:
System.out.println("Monday");
break;
case 3:
System.out.println("Tuesday");
break;
case 4:
System.out.println("Wednesday");
break;
case 5:
System.out.println("Thursday");
break;
case 6:
System.out.println("Friday");
break;
case 7:
System.out.println("Saturday");
break;
default:
System.out.println("Invalid day");
}
}
}
Concepts Behind the Snippet
The switch-case
statement is a control flow statement that allows you to execute different blocks of code based on the value of a single variable or expression. It provides a more efficient alternative to multiple if-else if-else
statements when dealing with a finite set of possible values. The expression used in the switch
statement must evaluate to a primitive data type (byte
, short
, char
, int
) or an enum
or a String
(from Java 7 onwards).
Real-Life Use Case
Consider a scenario where you need to process different user roles within an application. A switch-case
statement can efficiently determine the appropriate actions to take based on the user's role (e.g., administrator, editor, viewer).
Best Practices
default
case to handle unexpected or invalid input.break
statements after each case
to prevent fall-through. Fall-through can be intentional in some cases but should be clearly documented.switch
statement matches the type of the case
labels.
Interview Tip
Be prepared to discuss the differences between switch-case
and if-else if-else
statements. Know when one is more appropriate than the other. Also, be ready to explain the importance of the break
statement and the behavior of fall-through.
When to Use Them
Use switch-case
statements when you have a single expression or variable that can take on a limited number of known values, and you want to execute different code blocks based on those values. They improve code readability compared to nested if-else
statements in such scenarios.
Memory Footprint
The memory footprint of a switch-case
statement is generally similar to that of an equivalent if-else if-else
chain. The compiler often optimizes switch-case
statements with a jump table, which can lead to faster execution in certain cases, but the memory usage is not significantly different.
Alternatives
Alternatives to switch-case
include if-else if-else
statements, polymorphism (especially with enums), and lookup tables (e.g., using a Map
).
Pros
if-else
statements for multiple, discrete choices.
Cons
byte
, short
, char
, int
, enum
, String
).break
statements to prevent fall-through, which can be error-prone.case
labels is very large.
FAQ
-
What happens if I don't include a `break` statement in a `case`?
If you don't include a `break` statement, execution will 'fall through' to the next `case`. This means the code block associated with the next `case` will be executed, even if the value of the expression doesn't match that `case`. This behavior can be intentional in some cases, but it's often a source of errors if it's not intended. -
Can I use a `String` in a `switch` statement?
Yes, since Java 7, you can use a `String` in a `switch` statement. -
Is the `default` case required?
No, the `default` case is optional. However, it's generally good practice to include it to handle unexpected or invalid input.