java String、StringBuilder
Java中的String和StringBuilder类:
1.String对象是不可变的。每一个看起来修改了String值的方法,实际上都是创建了全新的String对象。代码示例如下:
String str12="abc";
str12.toUpperCase();
System.out.println(str12);
上面程序输出结果为 abc
str12.toUpperCase();该方法是将str12大写,但实际上是给大写之后的字符串重新开辟了空间,丝毫不会影响str12的值。 在计算机的程序设计中,对字符串的操作是非常频繁的。为了提高效率,不会为每一个字符串都开辟空间。相当于一个“拘留池”,创建的字符串变量都存储在拘留池中,当有新的String变量时,jdk会先判断
一下,拘留池中是否已经存在该字符串。如果有,直接将变量的引用指向该字符串,如果没有才会去开辟空间。
注意:
这个拘留池效应,只针对非new出来的字符串,如果是String str=new String("abc");那么不管拘留池中是否已经存在“abc”这个字符串,都会给重新开辟空间。因为这个语句的执行顺序是:先为abc开辟
一个空间,然后再将str这个引用指向这个空间。
2.我们在程序中经常会写
System.out.println("a"+1+"b");
这里深入讲解一下,重载操作符“+”;
1.println()是将括号内的值转换成string字符串,然后输出的。其实就是去调用toString()方法。
2.当有"+"这个重载操作符的时候,编译器会自动创建StringBuilder对象来处理括号内的字符串操作。
这里稍微分析下,为什么编译器会这么干:因为String是不可变的,当我们每次给字符串“a”连接一个字符串“b”的时候,必然需要重新开辟一个新的空间,然后将值copy进去。效率低,还会产生需要垃圾回收的一系列对象。因此这里最好使用可变的StringBuilder对象来处理。
3.这里介绍下StringBuilder:
它是可变的,当需要增加某个字符串长度的时候,直接append就可以了。
当使用StringBuilder str=new StringBuilder()这个无参构造函数来创建StringBuilder对象的时候,会默认创建长度为16的char[]类型的数组。当你调用append()方法追加的字符串长度大于16的时候(str.length=19),就会需要重新开辟空间。此时内部会将value的值左移+2(如当前是16,二级制是10000,左移之后就是100000(对应10进制数是32),32+2=34),比较value左移+2的值与当前字符串长度与新追加的字符串长度之和,谁的值比较大就取这个大的值去开辟相应的空间长度。
因为默认开辟的空间只有16个字符大小,在我们还用StringBuilder对象的时候,如果超出这个长度就需要重新开辟空间,就失去了StringBuilder的优势。所以,当我们可以大致确定所需要的字符串长度时,建议使用StringBuilder(XXX)这个构造函数,用来减少重新分配的次数,提升性能。
java String、StringBuilder的更多相关文章
- Java String、StringBuilder和StringBuffer
转载: Java String.StringBuilder和StringBuffer 概览 在Android/Java开发中,用来处理字符串常用的类有3种: String.StringBuilder. ...
- JAVA String、StringBuilder、和StringBuffer的区别,及如何使用
目录 String类 一.String类的理解和创建对象 二.String类创建的方式 两种创建String对象的区别 测试题 三.String常用方法 四.StringBuffer类 1.Strin ...
- 自动化测试学习之路--java String、StringBuilder
Java中的String和StringBuilder类: 1.String对象是不可变的.每一个看起来修改了String值的方法,实际上都是创建了全新的String对象.代码示例如下: String ...
- Java String、StringBuilder、StringBuffer[笔记]
String对象是字符串常量(创建之后不可更改),StringBuilder和StringBuffer对象是字符串变量(可更改),三者主要区别在于执行速度和线程安全. 执行速度 执行速度:String ...
- 探秘Java中的String、StringBuilder以及StringBuffer
探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问 到的地方,今天就来和大家一起学习 ...
- 探秘Java中String、StringBuilder以及StringBuffer
探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问 到的地方,今天就来和大家一起学习 ...
- java中String、StringBuilder、StringBuffer三者的区别
在Java项目开发中,字符串是最长使用的数据类型,而有关字符串的String.StringBuilder.StringBuffer三者又常常让人分不清楚什么时候该使用哪个. 特此整理一下. Strin ...
- Java中String、StringBuilder以及StringBuffer
原文出处: 海子 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String.StringBuilder和StringBuffe ...
- 解析Java中的String、StringBuilder、StringBuffer类(一)
引言 String 类及其相关的StringBuilder.StringBuffer 类在 Java 中的使用相当的多,在各个公司的面试中也是必不可少的.因此,在本周,我打算花费一些时间来认真的研读一 ...
随机推荐
- 感知机分类(perceptron classification)
概述 在机器学习中,感知机(perceptron)是二分类的线性分类模型,属于监督学习算法.输入为实例的特征向量,输出为实例的类别(取+1和-1). 感知机对应于输入空间中将实例划分为两类的分离超平面 ...
- 2019杭电暑假多校训练 第六场 Snowy Smile HDU - 6638
很多题解都是简单带过,所以打算自己写一篇,顺便也加深自己理解 前置知识:线段树.线段树维护最大字段和.二维坐标离散化 题解: 1.很容易想到我们需要枚举所有子矩阵来得到一个最大子矩阵,所以我们的任务是 ...
- 有几个水洼(DFS)
#include <iostream> #include<cstdio> using namespace std; #define maxn 105 char field[ma ...
- Python—使用列表构造栈数据结构
class Stack(object): """ 使用列表实现栈 """ def __init__(self): self.stack = ...
- 关于live2D的使用
<script src="https://eqcn.ajz.miesnfu.com/wp-content/plugins/wp-3d-pony/live2dw/lib/L2Dwidge ...
- linux mysql备份数据库
$ mysqldump -u root -p 数据库名称 > beifen.sql 恢复 source beifen.sql
- bzoj2127happiness(最小割)
一眼最小割. 一种比较好想的建图方式如下: 连源点表示学文,连汇点表示学理,然后adde(S,id(i,j),a[i][j]),adde(id(i,j),T,b[i][j]):对于相邻座位选择同一科的 ...
- ant design for vue select 数据回显问题
例如: 想要回显id为1的温度, 结果直接在select框中显示了1,而不是选中了温度, 此时因为select中的value是string类型, 而我们设置的id是number类型, 对应不上, 所以 ...
- 判断1/N是否为无限小数
给定一个正整数N,请判断1/N是否为无限小数,若是输出YES,若不是请输出NO. 思路: 只要被除数n可以转换成2的次幂或者2与5的组合即为有限小数,否则为无线小数 代码如下: #include &l ...
- C# 扩张方法的语法
using System; namespace ConsoleApp { class Program { static void Main(string[] args) { string str = ...