You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中在when语句内判断数组与列表大小的问题咨询

解答你的Kotlin When语句困惑

嘿,刚接触Kotlin就迷上模式匹配的理念,真的很有眼光——when语句确实是Kotlin里超灵活的特性!我完全能理解你遇到这种“逻辑矛盾”时的疑惑,咱们一步步拆解问题。

首先,根据你的描述,我猜你的代码大概是类似这样的:

val sampleList = listOf("a", "b")
val sampleArray = arrayOf("x", "y", "z")

when {
    sampleList.size == sampleArray.size -> println("false") // 你以为这个分支只在size相等时执行
    else -> println("true")
}

// 对应的if语句
if (sampleList.size == sampleArray.size) {
    println("这个if从未执行")
}

你说当列表和数组size不同时,when的第一个分支居然触发了,打印出"false",但if语句(判断size相等)从来没执行——这看起来完全矛盾,对吧?

问题出在哪?

最可能的原因是你把when分支的条件写反了!比如你原本想表达“当size相等时打印true,否则打印false”,但实际写的是:

  • when的第一个条件是sampleList.size != sampleArray.size(判断size不等),然后在这个分支里打印了"false"
  • 而你的if语句是判断size相等,所以当size不等时,if自然不会执行,但when的第一个条件满足,就打印了"false"

另一种可能是你在when里误用了条件的逻辑关系,比如用了逗号分隔多个条件(Kotlin里when的逗号是逻辑或的意思),比如:

when {
    sampleList.size == 2, sampleArray.size == 3 -> println("false")
    // 只要其中一个条件满足就会进入分支,哪怕size实际不等
}

怎么修正?

先明确你的需求:如果列表和数组size相等,打印true;否则打印false。那正确的when写法应该是:

val sampleList = listOf("a", "b")
val sampleArray = arrayOf("x", "y", "z")

when {
    sampleList.size == sampleArray.size -> println("true")
    else -> println("false")
}

// 对应的if语句也会在size相等时触发
if (sampleList.size == sampleArray.size) {
    println("现在这个if会执行啦")
}

另外,如果你想用when的表达式特性(更符合模式匹配的理念),可以直接把结果赋值给变量,代码更简洁:

val sizeMatch = when (sampleList.size == sampleArray.size) {
    true -> "true"
    false -> "false"
}
println(sizeMatch)

// 或者更简洁的写法
val sizeMatchShort = if (sampleList.size == sampleArray.size) "true" else "false"
println(sizeMatchShort)

额外提醒:列表和数组的size属性

Kotlin里List的size和Array的size都是直接返回元素个数,不存在类型差异导致的计算错误,所以只要条件写对,逻辑肯定是符合预期的。

内容的提问来源于stack exchange,提问作者Vdav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:50:21