String详解说明
大家平时都string都不是很在意,但是每当面试碰到String的时候在“==”和equals之间就乱了,下面我来说一说String,也许不够全面,请大家多多指教,希望会帮到处于蒙圈状态的人们。
一、Java中字符串的不变性
String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。如下所示:
如果用equals比较,返回的肯定都是true,因为equals比较的是内存地址所指向的具体内容,而“==“比较的是内存地址。
下面我给大家看一下他们的内存地址是怎么指向的。大家明白了内存的分配情况。自然就不会弄乱了。如下图:
二、StringBulider和StringBuffer 类
在Java中,除了可以使用 String 类来存储字符串,还可以使用 StringBuilder 类或 StringBuffer 类存储字符串,那么它们之间有什么区别呢?
1、String 类具有是不可变性。如下:
运行结果如下:
从运行结果中我们可以看到,程序运行时会额外创建一个对象,保存 "helloworld"。当频繁操作字符串时,就会额外产生很多临时变量。使用 StringBuilder 或 StringBuffer 就可以避免这个问题。在需要频繁对字符串进行修改操作时使用 StringBuilder 的效率比 String 要高至于 StringBuilder 和StringBuffer ,它们基本相似,不同之处,StringBuffer 是线程安全的,而 StringBuilder 则没有实现线程安全功能,所以性能略高。因此一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用 StringBuilder 类。那么如何定义 StringBuilder 类的对象呢? 我们来看下面的代码:
2、StringBuilder 类提供了很多方法来操作字符串:
在下面的示例代码中,创建了 StringBuilder 对象,用来存储字符串,并对其做了追加和插入操作。这些操作修改了 str 对象的值,而没有创建新的对象,这就是 StringBuilder 和 String 最大的区别。
运行结果:
最新文章
- centos 6.0用yum安装中文输入法
- dos2unix
- JS设计模式--简单工厂模式
- php 小试 mysql-zmq-plugin 和 pthreads
- Java中数组的特性
- Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法
- CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组
- oracle11g 数据文件误删恢复(无备份)
- jQuery 遍历 - parent() 方法
- HDU 5816 Hearthstone (状压DP)
- ubuntu12.04已安装SQLite3 而简单易用
- 前端开发chrome console的使用 :评估表达式 – Break易站
- SpringBoot功能持续更新
- sqlalchemy基础教程
- How can I get the baseurl of site?
- Redis慢查询日志学习功能
- 常用的 composer 命令
- ubuntu 环境下pycharm的 安装与激活教程 以及错误解决方法
- 使用better-scroll遇到的问题
- (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务)