String 源码解析 -String 的使用注意
String 源码解析-String 的使用注意
String 的相等判断(==与 equals())
看这个小标题应该勾起了大家的回忆,相信很多都会遇到一个面试题或者笔试题:==与 equals()有什么区别?
此分析也基本上是围绕这道题展开的,首先贴上 String 中 equals()方法的源代码:
复制代码
首先方法中第一步 this == anObject 判断了两个对象的内存地址是否相同
if (anObject instanceof String)对两个对象是否类型一致进行了判断(是否同为 String 类型)
if (n == anotherString.value.length)对两个对象中 value 的长度是否相等做了判断
最后的 while 对 value 指向的 byte 数组进行循环比较,判断每个 byte 是否一致
以上 4 点也完全解释了 equals()方法内部做的事情有哪些,==其实就只是对内存地址的简单比较。到这里其实此道题目也就迎刃而解了。
String 的字符替换
此点在实际写代码的时候比较容易碰到,比如:replace()、repalceAll()、repalceFirst(),一个是替换字符/字符串、一个是替换所有字符串、一个是替换匹配到的第一个字符串。
代码说明:
复制代码
运行结果:
复制代码
replace 其实替换的是所有匹配到的字符
repalceFirst 只会替换匹配到的第一个字符
要删除某个字符,使用 replace 进行替换即可
其中内部的实现基本都是使用正则表达式实现的,但是 replaceAll 使用的字符串的正则表达式,所以一些特殊符号需要进行转义,分别是:
( [ { / ^ - $ ** } ] ) ? * + .
评论