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很 ...
随机推荐
- PAT-GPLT L1-033 - 出生年 - [简单模拟]
题目链接:https://www.patest.cn/contests/gplt/L1-033 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standar ...
- SQL Fundamentals: Basic SELECT statement基本的select语句(控制操作的现实列)(FROM-SELECT)
SQL Fundamentals || Oracle SQL语言 Capabilities of the SELECT Statement(SELECT语句的功能) Data retrieval fr ...
- Pandas的loc方法
当你读取到DataFrame的数据时,想去定位某一个数据项,可以使用loc方法进行查找,之后你可以赋值给他. import pandas as pd df = pd.read_csv('file_na ...
- HDU - 5818 Joint Stacks 比较大の模拟,stack,erase
https://vjudge.net/problem/HDU-5818 题意:给你两个栈AB,有常规push,pop操作,以及一个merge操作,merge A B 即将A.B的元素按照入栈顺序全部出 ...
- dialog弹层背景overlayer实现的方式
1 增加一个层<div class="dialogLayer"></div>, 要不就利用伪元素 ::before 2 利用box-shadow: 0 0 ...
- PHP之ctype扩展
$str = "121"; 检查成功返回true 否则返回false //检测一个字符串是否是纯字符(a-z,A-Z) var_dump(ctype_alpha($str));// ...
- Cocos2d比较好的博客
1 .http://blog.csdn.net/bill_man/article/details/7202458 学习笔记 2.http://cocos2d-x.org/ 官网 3.http://ww ...
- go语言编程入门
查看文档 首先先分享一个可以在本地就能查看文档的骚操作(linux系统) 1.打开命令行终端,输入godoc -http=:8000,如果想后台运行在后面加个& 2.然后打开浏览器,输入网址: ...
- 最强Mac电脑 工作站级别一体机iMac Pro公布
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/a2Ni5KFDaIO1E6/article/details/78795857 前不久传出消息,苹果将 ...
- Centos7 中 Node.js安装简单方法
最近,我一直对学习Node.js比较感兴趣.下面是小编给大家带来的Centos7 中 Node.js安装简单方法,在此记录一下,方便自己也方便大家,一起看看吧! 安装node.js 登陆Centos ...