Java代码for循环内if(smallWord == null || bigWord.compareTo(smallWord)<0)逻辑求解析
Java代码if判断条件逻辑解释
这个if(smallWord == null || bigWord.compareTo(smallWord)<0)条件用的是短路或判断规则,只要两个条件任意一个成立,就会执行smallWord = bigWord的赋值操作,两部分逻辑拆解如下:
- 第一个条件
smallWord == null
这是专门处理首次循环的初始化逻辑:初始状态下我们还没有记录任何用户输入的字符串,第一次拿到输入内容时,直接把它设为初始的最小字符串即可。同时由于短路或的特性,这个条件成立时不会执行后面的比较逻辑,也避免了对null调用compareTo引发的空指针异常。 - 第二个条件
bigWord.compareTo(smallWord) < 0
这里遵循JavaString类内置的compareTo字典序比较规则,方法返回值的含义固定:- 返回值<0:调用方法的字符串(当前刚输入的
bigWord)字典序比参数中的字符串(当前已记录的最小字符串smallWord)更靠前 - 返回值=0:两个字符串内容完全一致
- 返回值>0:
bigWord的字典序比smallWord更靠后
所以当这个条件成立时,说明当前输入的内容比之前记录的最小内容字典序更小,需要更新最小字符串的记录。
- 返回值<0:调用方法的字符串(当前刚输入的
运行示例参考
假设用户指定输入数量为4,依次输入cat、apple、banana、ant,判断过程如下:
- 第1次循环:
smallWord为null,条件成立,smallWord更新为cat - 第2次循环:
apple.compareTo(cat)结果为负,条件成立,smallWord更新为apple - 第3次循环:
banana.compareTo(apple)结果为正,条件不成立,smallWord保持apple - 第4次循环:
ant.compareTo(apple)结果为负,条件成立,smallWord更新为ant
最终输出的最小字典序字符串为ant。
内容的提问来源于stack exchange,提问作者1Skillz
相关产品推荐
相关产品推荐

