golang 、java、c++、javascript 语言switch case异同

特性 Go Java C++ JavaScript
默认行为 自动跳出 自动穿透 自动穿透 自动穿透
穿透关键字 fallthrough (不写break) (不写break) (不写break)
case 多值 ✅ 支持 ❌ 不支持 ❌ 不支持 ❌ 不支持
switch 后无表达式 ✅ 支持 ❌ 不支持 ❌ 不支持 ❌ 不支持
case 可以是表达式 ✅ 支持* ❌ 需常量 ❌ 需常量 ❌ 需常量
类型开关 ✅ v.(type) ❌ (用instanceof) ❌ (用typeid) ❌ (用typeof)
case 变量作用域 独立 共享整个switch 共享整个switch 共享整个switch
fallthrough 穿透后 无条件执行下个case 无此概念 无此概念 无此概念

*注:Go 在使用 switch {}(无表达式)时 case 可以是任意布尔表达式

1. 默认行为(最大区别)

// Go - 自动跳出

n := 1

switch n {

case 1:

fmt.Println("一") // 只输出"一"

case 2:

fmt.Println("二") // 不会执行

}
// Java - 自动穿透

int n = 1;

switch (n) {

case 1:

System.out.println("一"); // 输出"一"

// 需要 break 才能跳出

case 2:

System.out.println("二"); // 也会执行!输出"二"

break;

}

复制代码
JavaScript - 同 Java
复制代码
C++ - 同 Java/JS

2. case 多值支持

// ✅ Go - 支持多值

switch day {

case "周六", "周日":

fmt.Println("周末")

case "周一", "周二", "周三", "周四", "周五":

fmt.Println("工作日")

}
// ❌ Java - 不支持,需要多个 case

switch (day) {

case "周六":

case "周日":

System.out.println("周末");

break;

case "周一":

case "周二":

case "周三":

case "周四":

case "周五":

System.out.println("工作日");

break;

}

JS/C++ 同 Java,都不支持 case 多值。

3. switch 后无表达式(条件判断)

// ✅ Go - 可以没有表达式

score := 85

switch {

case score >= 90:

fmt.Println("A")

case score >= 80:

fmt.Println("B")

case score >= 70:

fmt.Println("C")

default:

fmt.Println("D")

}
// ❌ Java - 必须写表达式

int score = 85;

switch (score) { // 只能检查 score 的值

case 90: // 只能匹配具体值

// ...

}

// 区间判断只能用 if-else

JS/C++ 同 Java,必须写表达式。

JS/C++ 同样要求 case 必须是常量表达式。

4. case 表达式类型

// ✅ Go - case 可以是复杂表达式

n := 5

switch {

case n > 0 && n < 10:

fmt.Println("1-9之间")

case n >= 10:

fmt.Println("10及以上")

}

5. 类型开关

// ✅ Go - 类型开关

var x interface{} = "hello"

switch v := x.(type) {

case string:

fmt.Println("字符串:", v)

case int:

fmt.Println("整数:", v)

}
// ⚠️ Java - 用 instanceof 和 if-else

Object x = "hello";

if (x instanceof String) {

String v = (String) x;

System.out.println("字符串: " + v);

} else if (x instanceof Integer) {

Integer v = (Integer) x;

System.out.println("整数: " + v);

}

JS 用 typeof + if-else,C++ 用 typeid + if-else。

6. fallthrough 穿透行为

// Go - fallthrough 无条件执行下一个 case

n := 1

switch n {

case 1:

fmt.Println("1")

fallthrough // 强制进入下一个 case

case 2:

fmt.Println("2") // 会被执行

}

// 输出:1 2
// Java - 没有 fallthrough,穿透是默认行为

int n = 1;

switch (n) {

case 1:

System.out.println("1");

// 没有 break,自动穿透

case 2:

System.out.println("2");

break;

}

// 输出:1 2

复制代码
📋 完整对比表
场景 Go Java C++ JavaScript
多值匹配 case 1,2,3: 多个 case 堆叠 多个 case 堆叠 多个 case 堆叠
区间判断 switch {} 后写条件 用 if-else 用 if-else 用 if-else
字符串匹配 ✅ 原生支持 ✅ 支持 (Java 7+) ❌ 不支持 ✅ 支持
变量作用域 每个 case 独立 整个 switch 共享 整个 switch 共享 整个 switch 共享
default 位置 任意位置 通常最后 通常最后 通常最后
空 case ✅ 允许(什么都不做) ✅ 允许 ✅ 允许 ✅ 允许
相关推荐
Dxy12393102161 小时前
JS DES 加密详解
开发语言·javascript·arcgis
充值内卷1 小时前
我给桌面加了个鱼缸:C++ 写后端,WebView2 里养一座 Three.js 小岛
开发语言·javascript·c++
三无少女指南1 小时前
从这里开始:Java 后端与 AI 工程的三条阅读路线
java·学习路线·ai工程
香蕉大香蕉(06敬畏市场)1 小时前
MySQL 单点详解(07)
java·数据库·mysql·ai·博客·八股
nice_lcj5202 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试
骑着蜗牛撵大象3272 小时前
2026 后端 AI 工程化:Spring AI 管调用、MCP 管工具、Agent 内嵌管自治
java·人工智能·后端·spring·ai·可观测性·mcp
tryxr2 小时前
JVM 垃圾回收机制
java·jvm·gc·垃圾回收
椒哥3 小时前
一天被问几十次"允许",我统计了 517 次,然后写了个插件
前端·javascript·github
揣一尾游鱼yu3 小时前
Spring上(IOC)笔记
java·笔记·spring·ioc
荣码4 小时前
长上下文与大文档处理:200页PDF怎么喂给AI,我踩了4个坑
java·python