java字符串抉择
作者:mrr 发布时间:2023-08-08 14:20:05
下面我们就字符串连接方面分析。
1.String
打开String的源码,如图所示
会发现存储字符串的字符数值是final常量。再看String的构造方法,发现String的value值在构造方法就确定了值。这里有必要说明下关键字final
final修饰的属性为常量(值不可改变),要么在声明的同时赋值,要么在构造方法里面进行赋值,一旦赋值就不能改变。
所以,用String来实现字符串拼接,由于String的值不可改变,所以每次拼接都要生成一个新的String来存储新的字符串。所以使用String来处理字符串拼接性能会很低。
更多String的信息,可以参考博客:http://longpo.iteye.com/blog/2199493
2.StringBuffer
StringBuffer类继承了抽象类 AbstractStringBuilder类,打开AbstractStringBuilder源码
再来StringBuffer看看重载的三个构造方法
发现都是调用父类AbstractStringBuilder的构造方法
发现StringBuffer的存储数据的char数组不是final类型的,说明可以变更,且构建出来的字符串都还有空余的位置来拼接字符串。
在StringBuffer中我们使用append()函数来进行字符串的拼接。我们可以想到虽然char数组还有剩余,但一直拼接肯定也不够用。所以有必要看看append函数的源码实现。
查看其父类AbstractStringBuilder的append方法
发现当value数组容量不够时,会创建一个新的value数组来存储字符串。到这里就应该明白了StringBuffer字符串拼接的原理啦。当char value数组不够时会创建个更大容量的数组来存储。效率明显比String高。
3.StringBuilder
StringBuilder和StringBuffer是两兄弟,用法基本一样,不同的是StringBuffer是同步的,线程安全的,而StringBuilder不保证同步,线程不安全。
StringBuilder在大多数实现中比StringBuffer快, 在字符串缓冲区被单个线程访问时,建议优先使用StringBuilder
以上所述是小编给大家介绍的java字符串抉择,希望对大家有所帮助
猜你喜欢
- 如下所示:String beginDate="1328007600000";SimpleDateFormat sdf=n
- 1 SharedPreferences 介绍SharedPreferences是使用键值对的方式来存储数据的SharedPreference
- AndroidStduio3.0使用gradle将module打包jar文件,首先需要安装gradle。打开控制台输入  
- 本文实例讲述了C++实现的O(n)复杂度内查找第K大数算法。分享给大家供大家参考,具体如下:题目:是在一组数组(数组元素为整数,可正可负可为
- jdk8之前 一、java.lang.Systemlong times = System.currentTimeMillis();
- 因为mybatis好使,所以几乎需要操作数据库的时候,我都会使用mybatis,而且在一个正式的项目中,同时存在BS和CS的程序,都使用的M
- 一:问题描述 在已经root过的android设备下,app执行一个linux命令,app需要获取su权限,在某些a
- 1 配置多数据源时,application.yml 的有关mybatis的配置是失效的,因为他不知道配置哪一个数据源2 applicatio
- 本文实例讲述了Java基于享元模式实现五子棋游戏功能。分享给大家供大家参考,具体如下:一、模式定义享元模式,以共享的方式高效地支持大量的细粒
- 什么是OKHttp一般在Java平台上,我们会使用Apache HttpClient作为Http客户端,用于发送 HTTP 请求,并对响应进
- 1. pom.xml文件配置<?xml version="1.0" encoding="UTF-8&qu
- 需求: 给定一个URL地址, 例如: http://www.cncounter.com/tools/shorturl.php, 解析对应的I
- Java HashSetHashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。HashSet 允许有 null 值。
- 摘要:这个问题算是老生常谈了,我也是一段时间没弄过了,所以感觉有些忘了,就记录一下。一、后端通过shiro在session中存储数据://
- 前言Future的问题写多线程程序的时候,可以使用Future从一个异步线程中拿到结果,但是如果使用过程中会发现一些问题:如果想要对Futu
- 在Android中使用SQLite数据库的入门指南,打算分下面几部分与大家一起分享, 1、什么是SQLite 2、Android中使用SQL
- 本文主要介绍的是通过使用java的相关类可以实现对文件或文件夹的压缩。zlib是一种数据压缩程序库,它的设计目标是处理单纯的数据(而不管数据
- Note:这篇文章是基于Android Studio 3.01版本的,NDK是R16。step1:创建一个包含C++的项目其他默认就可以了。
- 背景在接口请求过程中,传递json对象,springboot转换为实体VO对象后,所有属性都为null。post请求:后台接收请求:当时就懵
- 一、问题描述今天使用SDK Manager将Android SDK的版本更新到了Android 5.1的版本,eclipse创建androi