Java的String对象
来源:互联网 发布:sql server seq 编辑:程序博客网 时间:2024/06/05 21:50
序言
一直在看java的一些知识,使用到最多的是String,但是在工作中,很少去关注在使用String的时候其内存分配的方式,写的时候的效率问题。好了,废话不多说,开始,欢迎 广大爱好者分享。
String对象
在Java中,String对象时一个不可变的对象,在检查源码的时候会发现一些结果。
查看String的源码会发现,它是一个final对象,在最低层使用的final修改的一个char数组实现的,所以,string对象是不可变的。
使用
那么在使用的时候,有啥子区别呢,看图
帅气的你是不是知道答案了呢,==和equals的区别是什么?
对答案就是
对,就是这样的,==运算是姑且是比较两个对象的内存地址是否相同 ,而equals是比较的内容(在重写equals时需要重写hashcode方法,为什么?)。在Jvm第一次遇到String的时候,会专门去内存里面开辟一片区域出来,存放String对象,叫做String池。当遇到"hello"的时候,JVM会去String区域里面检查是否有"hello"对象,没有,则创建一个返回,然后返回给引用,如果有,则直接把这个对象返回。所以==和equals都是true。相信你已经知道了吧,s和s1指向的都是同一个对象。
然后下面这种情况呢?
对,没错,是不是喜欢这样写,没注意到呢,聪明的你是不是知道了?
你的答案是不是一样呢,为什么呢?
因为JVM遇到"hello"的时候会像上面那种情况一样,new String("hello")里面的"hello"会去String池里去找,如果有,就返回,没有就创建了返回,问题就出在前面的那个new上面,JVM会在内存上创建一个Strng对象返回,所以内容一样,但是内存却不一样了。
所有,hashcode一样,但是不一定是同一个对象,但是如果是同一个对象,hashcode必定一样。
总结
打完收工。
在使用String的时候,尽量避免使用new运算符。
- java的string对象
- Java的String对象
- JAVA String对象的创建
- 解析Java中的String对象的数据类型
- 解析Java中的String对象的数据类型
- 解析Java中的String对象的数据类型
- 解析Java中的String对象的数据类型
- 解析Java中的String对象的数据类型
- JAVA创建String对象的问题
- 为什么Java的String对象不能改变
- 解析Java中的String对象的数据类型
- java的堆栈机制与String对象
- JAVA中String对象的比较
- JAVA的String对象编辑器优化
- JAVA中String对象的比较
- java创建String对象的问题
- 解析Java中的String对象的数据类型
- 解析Java中的String对象的数据类型
- 服务端开发指南与最佳实战 | 数据存储技术 | MySQL(01) 数据类型的使用与选择
- JSON全面讲解
- php.ini设置文件传输限制
- 程序员常用工具收集
- POJ2337【欧拉通路(模板)】
- Java的String对象
- CSS初次实战之梅兰整站自搭建流程
- 关于WEB项目自动导包的问题
- 高德地图 步行路线规划 Walking
- VMware配置虚拟网络
- c++实验3
- 单链表反转
- 421. Maximum XOR of Two Numbers in an Array
- HDU1429 胜利大逃亡(续) 【状压搜索BFS】