java字符串String(一)
来源:互联网 发布:一人开十几个淘宝店 编辑:程序博客网 时间:2024/06/05 03:39
一、字符串连接:
四种方式,比较性能高低:
例子:abc和100000个def进行连接
用来测试运行时间:
long time1=System.currentTimeMillis();……(运行程序)long time2=System.currentTimeMillis();System.out.println("the cost is "+(time2-time1));
显然后两者的效率就要高很多
1.直观了当的 ”+”
String a="abc"; for(int i=0;i<100000;i++){ a=a+"def"; }
一条语句中,可以放心使用+号连接,不会影响性能。
String a = "a" + "a"; String s = "a" + "b" + a + "c" + 5 +"d";
编译器自动处理成:
String s = new StringBuilder("ab").append(a).append("c").append(5).append("d").toString();
但是在多次循环连接中用这种方式是极低效的
2.concat
for(int i=0;i<100000;i++){ a.concat("def"); }
+号和concat()方法使用了StringBuilder,他们的性能应该和StringBuilder的一样好,但是由于额外的创建StringBuilder和做.append(str).append(str).toString()的操作,使得他们的性能会受到一些影响,尤其在多次循环创建下。
3.StringBuilder,append
StringBuilder sb=new StringBuilder("abc"); for(int i=0;i<100000;i++){ sb.append("def"); }
4.StringBuffer,append
StringBuffer sbf=new StringBuffer("abc"); for(int i=0;i<10000000;i++){ sbf.append("def"); }
StringBuffer和StringBuilder基本一样,区别就是:
StringBuffer是线程安全的;
StringBuilder不是线程安全的,但性能稍好一些,在不需要线程安全的字符串连接,尽量使用StringBuilder。(大部分情况下都不需要线程安全)
二、字符串匹配
Java中字符串中子串的查找共有四种方法,如下:
1、int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引。
2、int indexOf(String str, int startIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。
3、int lastIndexOf(String str) :返回在此字符串中最右边出现的指定子字符串的索引。
4、int lastIndexOf(String str, int startIndex) :从指定的索引处开始向后搜索,返回在此字符串中最后一次出现的指定子字符串的索引。
//字符串匹配的实现 String str1 = "abcdefghijklmnabc"; // 从头开始查找是否存在指定的字符 System.out.println(str1.indexOf("c")); // 从第四个字符位置开始往后继续查找 System.out.println(str1.indexOf("c", 3)); //若指定字符串中没有该字符则系统返回-1 System.out.println(str1.indexOf("x"));
三、String中==和equal()的区别
1.“==”的含义:
基本数据类型 :byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(==),比较的是他们的值。
复合数据类型(类,比如String):当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)。
(除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。因为每new一次,都会重新开辟堆内存空间。)
2.equals
JAVA当中所有的类都是继承于Object这个超类的,在Object类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被复写了,如String、Integer、Date。在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
所以说,对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被复写,按照复写的要求来。
String类中被复写的equals()方法其实是比较两个字符串的内容。
- java字符串String(一)
- Java字符串String(一)
- Java学习之字符串类String(一)
- Java字符串(String)
- java 字符串(string)
- java字符串(String)
- Java — String(字符串)
- Java 字符串(String类)
- 字符串相关类(一)String 类
- .NET数据类型小结一:字符串(String)
- C#基础(一)字符串String
- String字符串操作<一>
- Java基础一(String )
- OC与Java对比学习(一)—— 字符串(NSString和String)
- Java面向对象-String类作业一字符串反转
- Java面向对象-String类作业一字符串转数组
- Java面向对象-String类作业一字符串转数组
- java string pool(java 字符串池)
- 0139 Nginx+Lua+Redis 对请求进行限制
- DWR3实现服务器端向客户端精确推送消息
- webstrom不能火狐运行网页的解决方法:设置浏览器路径
- 蓝桥杯辅导视频学习-浮点数的注意事项
- cisco交换机端口安全之端口隔离
- java字符串String(一)
- WinPcap编程——捕获数据包
- 一张图总结计算机中数的表示
- 数据类型对应字节数(32位,64位 int 占字节数)
- 详解 QT 布局管理界面 图文并茂
- 深入理解frame和bounds
- 安卓Android轻松完成支付宝支付教程
- Java中的剪切板操作
- css3特性汇总