大家平时都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 最大的区别。

运行结果:

最新文章

  1. centos 6.0用yum安装中文输入法
  2. dos2unix
  3. JS设计模式--简单工厂模式
  4. php 小试 mysql-zmq-plugin 和 pthreads
  5. Java中数组的特性
  6. Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法
  7. CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组
  8. oracle11g 数据文件误删恢复(无备份)
  9. jQuery 遍历 - parent() 方法
  10. HDU 5816 Hearthstone (状压DP)
  11. ubuntu12.04已安装SQLite3 而简单易用
  12. 前端开发chrome console的使用 :评估表达式 – Break易站
  13. SpringBoot功能持续更新
  14. sqlalchemy基础教程
  15. How can I get the baseurl of site?
  16. Redis慢查询日志学习功能
  17. 常用的 composer 命令
  18. ubuntu 环境下pycharm的 安装与激活教程 以及错误解决方法
  19. 使用better-scroll遇到的问题
  20. (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务)

热门文章

  1. thinkphp phpexcel导入
  2. A Byte of Python 笔记(2)基本概念:数、字符串、转义符、变量、标识符命名、数据类型、对象
  3. pcap文件格式解析
  4. Linux中fork()函数详解(转)
  5. 手动修改VisualStudio IISExpress的配置
  6. Json.Net系列教程 3.Json.Net序列化和反序列化设置
  7. 2014第35周三jquery最近用到的内容总结
  8. River Hopscotch(二分最大化最小值)
  9. exists
  10. mysql 中的 IF 和 IFNULL 用法