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很 ...
随机推荐
- SQL语句的执行过程
1.语法校验 如果在SQL计划缓存中没有对应的执行计划,服务器首先会对用户请求的SQL语句进行语法效验,如果有语法错误,服务器会结束查询操作,并用返回相应的错误信息给调用它的应用程序. 注意:此时返回 ...
- Linux--netstat命令
netstat:显示网络状态 语法定义:netstat [-acCeFghilMnNoprstuvVwx] [-A<网络类型>][--ip] 参数说明: -a 或 -all :显示所有连线 ...
- ceil 和floor
ceil 天花板 floor 地板 ceil向上取整 foor向下取整
- CH6101 最优贸易【最短路】
6101 最优贸易 0x60「图论」例题 描述 C国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通 ...
- LDA模型数据的可视化
""" 执行lda2vec.ipnb中的代码 模型LDA 功能:训练好后模型数据的可视化 """ from lda2vec import p ...
- HDFS架构详解-非官档
Namenode 1.namenode是一个中心服务器,单一节点(简化系统的设计和实现),负责管理文件系统的命名空间(namespace)以及客户端对文件的访问. 2.文件操作:namenode负责对 ...
- MySQL复制原理
mysql从3.23开始提供复制功能,复制指将主库的ddl和dml操作通过binlog文件传送到从库上执行,从而保持主库和从库数据同步.mysql支持一台主库同时向多台从库复制,从库同时也可以作为其他 ...
- Apple Pay的实现
首先是搜到的大神写的全套知识点:http://www.jianshu.com/p/8d7b86f1d142 http://www.cnblogs.com/dashunzi/archive/2016/0 ...
- 数据结构——栈(C语言实现)
#include <stdio.h> #include <stdlib.h> #include<string.h> #include<malloc.h> ...
- PHP之ctype扩展
$str = "121"; 检查成功返回true 否则返回false //检测一个字符串是否是纯字符(a-z,A-Z) var_dump(ctype_alpha($str));// ...