核心区别是查找方向相反但返回索引均从左往右计数:indexof从前向后找首个匹配,lastindexof从后向前找最后一个匹配;fromindex对前者为起始位置,对后者为搜索上限;二者返回值均为原字符串中从左数的索引或-1。

核心区别就一条:查找方向相反,但返回的索引都是从左往右数的。
查找方向不同
indexOf 从字符串开头(索引 0)往结尾方向找,找到第一个匹配就停;
lastIndexOf 从字符串末尾开始往开头方向找,找到最后一个匹配就停。
比如 "abca" 中查找 "a":
→ indexOf 返回 0(第一个 a 在位置 0)
→ lastIndexOf 返回 3(最后一个 a 在位置 3)
fromIndex 参数含义不同
两者都支持可选的 fromIndex 参数,但作用逻辑不一样:
• indexOf 的 fromIndex 是“起点”,从该位置开始往后搜;
• lastIndexOf 的 fromIndex 是“上限”,搜索范围限定在 [0, fromIndex] 区间内,仍是从右往左查。
例如:
→ "hello".indexOf("l", 3) 从索引 3 开始往后找,返回 2(因为索引 3 是 'l' 自身,但它是从 3 开始查,实际匹配的是索引 2 的 'l'?不对——注意:indexOf 从 fromIndex 开始查,所以 "hello".indexOf("l", 3) 实际查的是子串 "lo",第一个 l 在原串索引 3,所以返回 3);
→ "hello".lastIndexOf("l", 3) 表示只在索引 ≤3 的部分(即 "hell")里从右往左找,返回 3。
返回值逻辑一致
无论哪个方法,只要找到匹配项,返回的都是该字符/子串在原字符串中**从左数的索引位置**(从 0 开始);
没找到时,两个方法都返回 -1。
它们都不改变原字符串,也不涉及大小写自动转换——"A" 和 "a" 被视为不同值。
常见误用提醒
- 别把 lastIndexOf 当作“倒序后的 indexOf”——它不是先翻转字符串再查,而是原串中逆向扫描
- fromIndex 为负数时,两者都会被当作 0 处理;超过长度时,indexOf 直接返回 -1,lastIndexOf 则按最大有效索引处理
- 空字符串
""作为 searchValue 时,indexOf 总是返回 0,lastIndexOf 返回字符串长度(如"abc".lastIndexOf("") === 3)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











