Java中那些让你傻傻分不清楚的小技巧
最近我们通过sonar静态代码检测,同时共同人工代码review,发明白项目中许多代码题目。除了通例的bug和安详裂痕之外,尚有几处要领用法错误,引起了我极大的乐趣。我为什么会对这几个要领这么感乐趣呢?由于它们极具疑惑性,也许会让我们傻傻分不清晰。 1. replace会替代全部字符? 许多时辰我们在行使字符串时,想把字符串好比:ATYSDFA*Y中的字符A替代成字符B,第一个想到的也许是行使replace要领。 假如想把全部的A都替代成B,很显然可以用replaceAll要领,由于很是直观,光从要领名就能猜出它的用途。 那么题目来了:replace要了解替代全部匹配字符吗? jdk的官方给出了谜底。 该要了解替代每一个匹配的字符串。 既然replace和replaceAll都能替代全部匹配字符,那么他们有啥区别呢? 1.replace有两个重载的要领。 个中一个要领的参数:char oldChar 和 char newChar,支持字符的替代。 source.replace('A', 'B') 另一个要领的参数是:CharSequence target 和 CharSequence replacement,支持字符串的替代。 source.replace("A", "B") 2.replaceAll要领的参数是:String regex 和 String replacement,基于正则表达式的替代。平凡字符串替代: source.replaceAll("A", "B") 正则表达替代(将*替代成C): source.replaceAll("*", "C") 趁便说一下,将*替代成C行使replace要领也可以实现: source.replace("*", "C") 无需对非凡字符举办转义。 不外,万万留意,切勿行使如下写法: source.replace("*", "C") 这种写法会导致字符串无法替代。 尚有个小题目,假如我只想替代第一个匹配的字符串该怎么办? 这时可以行使replaceFirst要领: source.replaceFirst("A", "B") 2. Integer不能用==判定相称? 不知道你在项目中有没有见过,有些同事对Integer范例的两个参数行使==较量是否相称? 横竖我见过的,那么这种用法对吗? 我的答复是看详细场景,不能说必然对,或差池。 有些状态字段,好比:orderStatus有:-1(未下单),0(已下单),1(已付出),2(已完成),3(打消),5种状态。 这时假如用==判定是否相称: Integer orderStatus1 = new Integer(1); Integer orderStatus2 = new Integer(1); System.out.println(orderStatus1 == orderStatus2); 返回功效会是true吗? 谜底:是false。 有些同窗也许会辩驳,Integer中不是有范畴是:-128-127的缓存吗? 为什么是false? (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |