首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
第一章 关于String的一些
时间:
2017-06-22 22:59:16
阅读:
126
评论:
0
收藏:
0
[点我收藏+]
标签:
字符
byte
数字
完全
方式
集合
第一章
标识
通过
==与equals()
equals()与hashCode
equals()与intern()
StringBuilder.append()与String的“+”
1.==比较2个内存单元的内容是否一样。基本类型如byte,int,char等就是直接比较它们的值。引用类型比较引用的值,即对象的逻辑地址,比较引用的2个对象是否为同一个对象。
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的一些
标签:
字符
byte
数字
完全
方式
集合
第一章
标识
通过
原文地址:http://www.cnblogs.com/lkcxf520/p/7067489.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!