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很 ...
随机推荐
- ubuntu下中文乱码解决方案(全)
转自 http://www.cnblogs.com/end/archive/2011/04/19/2021507.html 1.ibus输入法 Ubuntu 系统安装后已经自带了ibus输入法,在 ...
- Linux--抓取Appium网站命令
# 获取各命令url地址 curl http://appium.io/docs/en/commands/device/app/is-app-installed/ 2>/dev/null | gr ...
- Cglib 与 JDK动态代理的运行性能比较
都说 Cglib 创建的动态代理的运行性能比 JDK 动态代理能高出大概 10 倍,今日抱着怀疑精神验证了一下,发现情况有所不同,遂贴出实验结果,以供参考和讨论. 代码很简单,首先,定义一个 Test ...
- HUST 1599 - Multiple(动态规划)
1599 - Multiple 时间限制:2秒 内存限制:64兆 461 次提交 111 次通过 题目描述 Rocket323 loves math very much. One day, Rocke ...
- PAT甲1004 Counting Leaves【dfs】
1004 Counting Leaves (30 分) A family hierarchy is usually presented by a pedigree tree. Your job is ...
- java 类中的细节
java 中类: 类是用于描述统一类型的对象的一个抽象的概念,类中定义了这一类对象所因具有的静态和动态属性. 举例: 瓶子静态: 有一个口.长长的形状-->java类中的成员变量动态属性: 可以 ...
- SQL Fundamentals: 数据更新及事务处理(INSERT INTO,UPDATE,DELETE,事务,锁)
SQL Fundamentals || Oracle SQL语言 在SQL语句中,数据操作语言DML由两部分组成,查询(DQL).更新操作(增加,修改,删除). 增加数据(INSERT INTO) 数 ...
- css3的一个小demo(箭头hover变化)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 2018/03/25 每日一个Linux命令 之 df
Linux df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计. 就像在windows下打开我的电脑一样会统计各个磁盘一样的情况 主要用于查看磁盘空间占用情况 -- [@hong:~] ...
- Number Sequence--POJ1019
Number Sequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 35251 Accepted: 10151 ...