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很 ...
随机推荐
- Pointer Lock
Pointer Lock API 指针锁定(以前叫做 鼠标锁定) 提供了一种输入方法,这种方法是基于鼠标随着时间推移的运动的(也就是说,deltas),而不仅是鼠标光标的绝对位置.通过它可以访问原始的 ...
- CH0103最短Hamilton路径 & poj2288 Islands and Brigdes【状压DP】
虐狗宝典学习笔记: 取出整数\(n\)在二进制表示下的第\(k\)位 \((n >> ...
- codeforces#518 Div2 ABCDE
A---Birthday http://codeforces.com/contest/1068/problem/A 题意: 有n种硬币,m个人.m个人要给Ivan送硬币,每个人送的硬币都要互不相同但数 ...
- Codeforces 752C - Santa Claus and Robot - [简单思维题]
题目链接:http://codeforces.com/problemset/problem/752/C time limit per test 2 seconds memory limit per t ...
- ZOJ 2760 - How Many Shortest Path - [spfa最短路][最大流建图]
人老了就比较懒,故意挑了到看起来很和蔼的题目做,然后套个spfa和dinic的模板WA了5发,人老了,可能不适合这种刺激的竞技运动了…… 题目链接:http://acm.zju.edu.cn/onli ...
- NTLM
我们介绍Kerberos认证的整个流程.在允许的环境下,Kerberos是首选的认证方式.在这之前,Windows主要采用另一种认证协议——NTLM(NT Lan Manager).NTLM使用在Wi ...
- jquery ajax contentType设置
默认get方法没有contentType,post方法的contentType为:application/x-www-form-urlencoded; charset=UTF-8 (1) 设置成app ...
- Python开发【模块】:Weakref
Weak references 前言: weakref模块允许python开发者创建弱引用对象. 再接下来中,术语referent代表被弱引用所引用的对象. 一个弱引用对于对象是不能够保持对象存活的: ...
- webpack学习三——output
output的两个参数filename,path 一.path输出路径,输出路径要绝对路径,否则报错.做法如下: path:__dirname + 'path' 二.filename 输出文件命,相对 ...
- 编码问题:python写入文件
方法一:(推荐) line1 = "我爱中国111" line2 = u"我爱祖国222" with open('1.txt','w',encoding='ut ...