PDF 课件和源代码下载地址:
https://github.com/geektime-geekbang/LetsJava
作者回复:
首先解释一下两个参数,prefix就是要判断的开头,如果要判断abcde是否以ab开头,那么就应该用ab做参数。toffset就是从源字符串的第几个字符开始找,这里源字符串就是abcde
所以return false这个语句的意思是,如果调用这个方法的时候,说要从负的索引开始,或者从某个已经明显不够匹配prefix的位置开始, 就直接返回false
ta指向的是字符串自己的bytes,是String类的成员变量。
pa就算传进来的参数的bytes,同上是String类的成员变量。
后面和coder相关的几个if判断应该是和编码相关的,这里实现的地方用的是byte数组而非char数组,所以要检查其编码
最后的return false就是不startWith, 比如abcde不是以acd开头的,匹配到第二个字符,b不等于c,就return false
作者回复: while循环是逐个字符比较,如果都匹配prefix就是startwith为true,否则为false
作者回复: 用两个问号结束问题看得出你很焦急呀。如果再加上几个感叹号,我隔着屏幕都能嗅到你如饥似渴的学习热情了。
我在最后一章有一节专门聊了聊怎么问问题。同时池建强老师的卖桃者说第三期专门讲怎么问问题,打开极客时间App,主页上就有。
就你现在这个问题,有两点硬伤:
1)代码不全,每个人用的JDK可能都不一样,相应的方法的实现代码也不一样。即使都是Oracle的JDK,即使大版本一样,小版本升级也有可能会有代码的改变。如果你想得到准确的回答,应该贴出你看到的代码
2)问题不是很清晰。应该说出你是怎么思考的,把自己的想法说清楚。首先,把自己看懂的说清楚;然后,再说自己从哪里开始没看懂。别人的回答才可能更有针对性。因为可能你认为你看懂的部分,也是不对的,造成你对后面代码的作用的理解有偏差。
作者回复: 一个一个字符的比较。具体的代码实现因jdk版本不同而不同