首页 > 代码库 > 第一章 关于String的一些
第一章 关于String的一些
- ==与equals()
- equals()与hashCode
- equals()与intern()
- StringBuilder.append()与String的“+”
2.equals方法在Object类中定义,其设计的初衷就是为了子类去重写它,如果子类没有重写则等同与==。
重写equals方法的目的是为了根据实际的目的来比较2个对象,很多时候来判断2个对象是否一致并不需要完全相同,只要根据需要的属性比较即可判断相似性。比如String类重写了equals方法,2个字符串对象内容相同则为true.
3.hashCode方法是为了算法快速定位数据而存在,equals则是为了比较值。要理解hashCode方法,要知道算法操作的其实是数字,hashCode方法将对象标识为数字对象进而能进行算法运算,Java中的许多集合操作则建立在这个基础之上。理解了散列表,对于理解hashCode方法就容易了,hashmap也是一个道理,不同对象可能产生相同的hash值,这取决于方法的实现,应当尽量将hash值分散提高效率。
4.intern方法调用时,jvm会在常量池中通过equals方法查找是否存在等值的String,存在则直接返回这个对象地址,没有则创建这个等值的字符串再返回这个新建的地址。什么地方可能用到intern方法呢?比如有一些固定的字符串要经常比较,像数据库的数据类型,当要检测每个表的列的类型时,可以以intern方式直接放到常量池,在后面的比较中就不用equals了,直接==比较。
5.关于+和StringBuilder.append两种字符串拼接方式的说法有很多,但是性能好坏要具体实际情况分析,在拼接过程中,将扩容的消耗降到最低就是比较好的方法了。
+拼接字符串会产生新的StringBuilder对象,最后再调用toString方法返回String对象,在拼接的过程中,除了新对象所占有的内存外,还要考虑StringBuilder对象扩容所消耗的内存,考虑这样一种情况,在循环体没拼接字符串,就会产生许多的对象,大量内存空间被占用,导致频繁的GC。
第一章 关于String的一些
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。