蜕变的快乐

享受蜕变的过程,感悟编程的乐趣

Java中的String

一、:String的性质

1.1.String的创建


Java中的String是属于对象的的,这也符合Java中一切皆对象的原理,String 类位于 java.lang 包中。默认情况下,该包被自动导入所有的程序。

String类常见的构造方法有:

        1)String(String original):创建一个String对象为original的拷贝;

        2)String(char[] value):用一个字符数组创建一个String对象;

        3)String(char[] value,int offset,int count):用一个字符数组从offset项开始的count个字符序列创建一个String对象;

1.2.字符串池的属性

        在字符串中存在一个非常特殊的地方,那就是字符串池。每当我们创建一个字符串对象时,首先就会检查字符串池中是否存在面值相等的字符串,如果有,则不再创建,直接放回字符串池中对该对象的引用,若没有则创建然后放入到字符串池中并且返回新建对象的引用。这个机制是非常有用的,因为可以提高效率,减少了内存空间的占用。
如:String str1 = "Hello World";
       String str2 = "Hello World"; 其实是指向同一块内存空间

1.3.String创建之后就不能修改

String类是不可改变的,所以你一旦创建了String对象,那它的值就无法改变了。 String 对象创建后则不能

被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。如果需要对字符串做很多修改,

那么应该选择使用StringBuffer类或StringBuilder 类。


二、:String的方法

2.1.字符串的比较

         equals() ------判断内容是否相同。

         compareTo() ------判断字符串的大小关系。

         compareToIgnoreCase(String int) ------在比较时忽略字母大小写。

         == ------判断内容与地址是否相同。

         equalsIgnoreCase() ------忽略大小写的情况下判断内容是否相同。

         reagionMatches() ------对字符串中的部分内容是否相同进行比较

2.2.字符串的连接


对于字符串而言我们经常是要对其进行拼装处理的,在java中提高了三种拼装的方法:+、concat()以及append()方法。
下面借用大神chenssy的例子来说明一下三种方式的效率的不同
public class StringTest {  
    /** 使用+、concat()、append()方法循环10W次 
     */  
    public static void main(String[] args) {  
        //+  
        long start_01 = System.currentTimeMillis();  
        String a = "a";  
        for(int i = 0 ; i < 100000 ; i++){  
            a += "b";  
        }  
        long end_01 = System.currentTimeMillis();  
        System.out.println("  +   所消耗的时间:" + (end_01 - start_01) + "毫米");  
          
        //concat()  
        long start_02 = System.currentTimeMillis();  
        String c = "c";  
        for(int i = 0 ; i < 100000 ; i++){  
            c = c.concat("d");  
        }  
        long end_02 = System.currentTimeMillis();  
        System.out.println("concat所消耗的时间:" + (end_02 - start_02) + "毫米");  
          
        //append  
        long start_03 = System.currentTimeMillis();  
        StringBuffer e = new StringBuffer("e");  
        for(int i = 0 ; i < 100000 ; i++){  
            e.append("d");  
        }  
        long end_03 = System.currentTimeMillis();  
        System.out.println("append所消耗的时间:" + (end_03 - start_03) + "毫米");  
    }  
}   
------------  
Output:  
  +   所消耗的时间:19080毫米  
concat所消耗的时间:9089毫米  
append所消耗的时间:10毫米  
通过以上可以看出append的效率是最高的,为什么最高呢,这要看源代码了,但是我现在的水平太低了,根据大神的分析因为append没有创建新的对象所以比较快,其他的两个都是通过创建新对象的方式。

2.3.字符串的查找

charAt(int index) ------返回指定索引index位置上的字符,索引范围从0开始。

indexOf(String str)------从字符串开始检索str,并返回第一次出现的位置,未出现返回-1。

indexOf(String str,int fromIndex);------从字符串的第fromIndex个字符开始检索str。

lastIndexOf(String str)------查找最后一次出现的位置。

lastIndexOf(String str,int fromIndex)----从字符串的第fromIndex个字符查找最后一次出现的位置。

starWith(String prefix,int toffset)-----测试此字符串从指定索引开始的子字符串是否以指定前缀开始。

starWith(String prefix)------测试此字符串是否以指定的前缀开始。

endsWith(String suffix)------测试此字符串是否以指定的后缀结束。

<span style="font-size:18px;">package TwoWeek;
public class StringManager {
	public static void main(String args[]){
		String str1 = "Hello World";
		
		System.out.println(str1.charAt(1));  //e
		System.out.println(str1.indexOf("e")); //1
		System.out.println(str1.indexOf("o", 2));
		System.out.println(str1.lastIndexOf("o"));//7
		System.out.println(str1.startsWith("Hello"));//true
		
	}
}</span>

三、:String、StringBuffer和StringBuilder

3.1.StringBuffer

StringBuffer和String一样都是用来存储字符串的,只不过由于他们内部的实现方式不同,导致他们所使用的范围不同,对于StringBuffer而言,他在处理字符串时,若是对其进行修改操作,它并不会产生一个新的字符串对象,所以说在内存使用方面它是优于String的。
总而言之,就是它更加侧重于对字符串的变化,例如追加、修改、删除,相对应的方法append(), insert(), delete()等。

3.2.StringBuilder

StringBuilder也是一个可变的字符串对象,他与StringBuffer不同之处就在于它是线程不安全的,基于这点,它的速度一般都比StringBuffer快。

3.3.小总结

1、String:在字符串不经常变化的场景中可以使用String类,如:常量的声明、少量的变量运算等。

2、StringBuffer:在频繁进行字符串的运算(拼接、替换、删除等),并且运行在多线程的环境中,则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装等。

3、StringBuilder:在频繁进行字符串的运算(拼接、替换、删除等),并且运行在多线程的环境中,则可以考虑使用StringBuffer,如SQL语句的拼装、JSON封装等(貌似这两个我也是使用|StringBuffer)。


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jinhuoxingkong/article/details/51558153
文章标签: java String String
个人分类: 【 JAVA SE 】
想对作者说点什么? 我来说一句

Java中的String

2012年10月18日 2KB 下载

介绍javaString类的方法

2011年01月14日 47KB 下载

JAVAstring类的运用

2013年09月06日 538KB 下载

String 比较

2012年08月25日 1MB 下载

练习JAVA语句中的String

2011年03月12日 1KB 下载

String与date的转换

2011年10月30日 25KB 下载

没有更多推荐了,返回首页

不良信息举报

Java中的String

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭