String和StringBuffer和StringBuilder
String类
Java语言中用String类代表不可变的字符串,它是由任意多个字符组成的序列。程序中需要存储大量的信息时,一般都用String对象。
1.字符串初始化
JavaSE API为字符串对象的初始化提供了多种类型的构造器。
String str=new String(“corejava”);(这个是把JVM中的常量池的内容复制到堆空间中,不节省空间)
或
String s=“corejava”;(//这种较为简洁,且节省空间,只是在JVM的常量池中寻找或创建一个corejava)
2.常用操作
1)获取字符的长度,如“corejava”.length();返回长度是8
2)字符串比较
==表示字符串变量是否引用自同一个字符串对象。
更常用的是用String类中覆盖Object类的equals方法来比较两个字符串变量所引用的字符串对象内容是否相同。
1 /*字符串比较*/
2 public class StringCompareTest{
3 public static void main(String[] args) {
4 String s1="abc中文";
5 String s2="abc中文";
6 String s3=new String("abc中文");
7 System.out.println(s1==s2);//false
8 System.out.println(s1.equals(s2));//true
9 System.out.println("----------");
10 System.out.println(s1==s3);//false
11 System.out.println(s1.equals(s3));//true
12 }
13 }
14 /*
15 运行结果:
16 true
17 true
18 ----------
19 false
20 true
21 */
22 //比较内容相等就用equals
23 System.out.println(s1==s2);//为什么这个是true?
另外,看看HashSet里面重写equals和Hashcode方法!!
StringBuilder和StringBuffer类
在Java SE API中还提供了StringBuilder和StringBuffer类,用来代表可变的字符串。
它们适用于需要对字符串内容进行频繁修改的情况,以提高性能。
StringBuilder类和StringBuffer类提供了相同的操作方法,只是StringBuilder类的方法
不保证线程同步。
StringBuilder类常用的构造器有以下两个:
1)StringBuilder():用来构造一个其中不带字符的字符串生成器,初始容量为16个字符。
2)StringBuilder(String str):构造一个字符串生成器,并将其内容初始化为指定的字符串内容。
例子:
1 public class StringBuilderTest{
2 public static void main(String[] args) {
3 StringBuilder sb=new StringBuilder("CoreJava");
4 sb.append(" Action ");//追加
5 sb.append(1.0);//追加
6 sb.insert(9,"In ");//指定索引处插入
7 String s=sb.toString();//转换为字符串
8 System.out.println(s);
9 }
10 }
11 //运行结果:CoreJava In Action 1.0
说明:
StringBuilder类提供的修改字符串内容的方法执行完成后都会返回自身的引用。
所以,连续调用StringBuilder类中的多个方法时,还可以使用如下的实例中的
“方法链”方式:
/*使用StringBuilder关键字字符串内容*/
StringBuilder sb=new StringBuilder(“CoreJava”);
sb.append(“ Action ”);
sb.append(1.0);
sb.append(9,”In ”);
String、StringBuffer、StringBuild和StringTokenizer的区别?
String用于字符串操作,属于不可变类(//即类对象被创建后其值不可改,使用场景是适合被共享,若修饰会被修改的对象时,相比于StringBuffer会生成很多无用的对象,且会被垃圾回收器回收,当项目变大的时候,这会严重影响程序的性能),而StringBuffer也是用于字符串操作,不同之处在于StringBuffer属于可变类(//即当对象被创建之后仍然可以对其值进行修改,所以当一个字符串的值会被经常更改时,用它)。
/*说明:String修改字符串的原理如下:先创建一个StringBuffer,其次调用StringBuffer的Append()方法,最后调用StringBuffer的toString方法把结果返回,显然降低了执行效率*/
String s=“Hello”;
s+=“world”;
<==>与上代码等价
StringBuffer sb=new StringBuffer(s);
s.append(“world”);
s=sb.toString();
另外,String和StringBuffer的区别在于String可以用用构造函数的方法进行初始化,也可以用赋值的方式来进行初始化,而StringBuffer只能用构造函数的方法来进行初始化。
从执行效率来讲,StringBuilder最高,StringBuffer次之,String最低,若数据量小,用String类;如果单线程操作大量的数据用StringBuilder类(用多线程不安全);如果多线程下操作大量的数据,考虑StringBuffer类;而StringTokenizer是用来分隔
字符串的工具类。
String和StringBuffer和StringBuilder的更多相关文章
- String、StringBuffer与StringBuilder之间区别
关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下 1.三者在执行速度方面的比较:StringBuilder > String ...
- (转)String、StringBuffer与StringBuilder之间区别
原文地址: http://www.cnblogs.com/A_ming/archive/2010/04/13/1711395.html 关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺 ...
- Java中String、StringBuffer、StringBuilder区别与理解
一.先比较String.StringBuffer.StringBuilder变量的HashCode值 使用System.out.println(obj.hashcode())输出的时对象的哈希码, 而 ...
- String、Stringbuffer、StringBuilder的区别(转载)
最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下. 关于这三个类在字符串处理中的位置不言而喻,那 ...
- String、StringBuffer、StringBuilder的区别
在日常开发过程中String字符串估计是被用到最多的变量了,最近看了一些String.StringBuffer和StringBuilder的东西,三者都可以对字符串进行操作,他们究竟有什么区别,以及适 ...
- String、StringBuffer、StringBuilder的一些小经验……
一说String.StringBuffer和StringBuilder,想必大家都很熟悉,这三者经常在我们的面试题中出现,我也是看到了关于这三个的经典面试题,才触动了我之前工作中的一些经历,故而根据我 ...
- java中String、StringBuffer、StringBuilder的区别
java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...
- String、StringBuffer与StringBuilder之间区别[全屏看文]
String.StringBuffer与StringBuilder之间区别[全屏看文] 最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,S ...
- Java中的String、StringBuffer以及StringBuilder的用法和区别
String String的构造方式有n种(据说n==11),常见的例举一二: String s1 = "hello world"; String s2 = new String( ...
- 浅析String、StringBuffer、StringBuilder的区别以及性能区别
前奏: 比较三者之间的区别在与区别他们做相同的事情的时候的区别,那就是在我们常见的拼接字符串的时候,StringBuffer.StringBuilder调用的是appende()方法,而String很 ...
随机推荐
- Kibana在Linux上安装部署及使用说明
Kibana安装及使用说明 Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索.查看交互存储在Elasticsearch索引中的数据. 官方地址:https://www. ...
- POJ-1157 LITTLE SHOP OF FLOWERS(动态规划)
LITTLE SHOP OF FLOWERS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19877 Accepted: 91 ...
- ububtu下安装配置搜狗输入法
安装搜狗输入法 for linux参考教程: http://blog.csdn.net/u013894834/article/details/60357071 安装后会遇到无法切换英文的问题,可以参考 ...
- Mapreduce 原理及程序分析
1.MapReduce(Map+Reduce) 提出一个问题: 目标:你想数出一摞牌中有多少张黑桃. 直观方式:一张一张检查并且数出有多少张是黑桃数目 MapReduce方法则是: 给在座的所有玩家中 ...
- TensorFlow 度量张量和张量或者和零之间的误差值
用于一个回归任务或者正则问题 # l2损失,output= sum(x ** 2)/2 inputdata = tf.Variable(np.random.rand(2,3), dtype=np.fl ...
- HDU - 5806 NanoApe Loves Sequence Ⅱ 想法题
http://acm.hdu.edu.cn/showproblem.php?pid=5806 题意:给你一个n元素序列,求第k大的数大于等于m的子序列的个数. 题解:题目要求很奇怪,很多头绪但写不出, ...
- python数据结构之哈希表
哈希表(Hash table) 众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry.这些个键值对(Entry)分散存储在一个数组当中,这个数组就是Has ...
- Cache replacement policies 缓存实现算法
Cache replacement policies - Wikipedia https://en.wikipedia.org/wiki/Cache_replacement_policies Cach ...
- 拓扑_dfs——找最小环
今天在题库发现了一个wa了很久还没调过的题,这个题呢是2015年noip的day1t2,莫名感觉难度上升(其实水的一匹). 这道题输出是3,其实就是一个图中让你找最小环,尽管我不会找环,但是要是我的话 ...
- java内存区域-方法区
方法区(Method Area)与java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码等数据.虽然java虚拟机规范把方法区描述为堆的一个 ...