PDF 课件和源代码下载地址:
https://gitee.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
作者回复: 嗯呐,[1, 5)
作者回复: 哈哈,总体来说,Java还是比C++要简单,因为不能直接操作内存,所以很多危险的操作在Java里都是做不到的
作者回复: ✅
作者回复: 推荐看文档/注释,英语嘛反正翻来覆去就那几个专业术语,多看看就习惯了。开始就看源代码会比较吃力。JDK的代码很多时候为了效率,并不是很易读。
作者回复: 对,不能直接根据引用去操作内存,所以Java里的string没法那么用。
作者回复: 滴~
作者回复: 没有,无参方法的调用也要加括号。
作者回复: while循环是逐个字符比较,如果都匹配prefix就是startwith为true,否则为false
作者回复: 用两个问号结束问题看得出你很焦急呀。如果再加上几个感叹号,我隔着屏幕都能嗅到你如饥似渴的学习热情了。 我在最后一章有一节专门聊了聊怎么问问题。同时池建强老师的卖桃者说第三期专门讲怎么问问题,打开极客时间App,主页上就有。 就你现在这个问题,有两点硬伤: 1)代码不全,每个人用的JDK可能都不一样,相应的方法的实现代码也不一样。即使都是Oracle的JDK,即使大版本一样,小版本升级也有可能会有代码的改变。如果你想得到准确的回答,应该贴出你看到的代码 2)问题不是很清晰。应该说出你是怎么思考的,把自己的想法说清楚。首先,把自己看懂的说清楚;然后,再说自己从哪里开始没看懂。别人的回答才可能更有针对性。因为可能你认为你看懂的部分,也是不对的,造成你对后面代码的作用的理解有偏差。