Fork me on GitHub

Java字符串String详解

1、String字符串

  实例化String对象:

  (1)直接赋值,如:String str="hello";

  (2)使用关键字 new,如:String str=new String("hello");

 

        

   

  由图可知:使用 new 的方式在堆内存中开辟了两个空间,

  第一个 "hello",对象 str 没有指向,无用等待回收,

  第二个 "hello",被 str 指向,有用。

    所以 直接赋值(只开辟了一个空间) 的方式更常用和合理,可以节省一些空间。

  

  字符串的内容不可更改

     如:

   

        

   

2、String字符串常用方法

     String字符串的方法较多,可以根据API给出的方法去做测试,下面是常用方法:

     (1)字符串长度:length() 「数组中的是 length 属性」

     (2)字符串转换数组:toCharArray()

     (3)从字符串中取出指定位置的字符:charAt()

     (4)字符串与byte数组的转换:getBytes()

     (5)过滤字符串中存在的字符:indexOf()  返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。(可以用在判断多位数是否包含某个数字时,先转成string再判断)

     (6)去掉字符串的前后空格:trim() 「空格易影响到对字符串的判断,需适时去掉」

     (7)从字符串中取出子字符串:subString()

     (8)大小写转换:toLowerCase() toUpperCase()

     (9)判断字符串的开头结尾字符:startWith() endsWith()

     (10)替换String字符串中的一个字符:replace()

 

3、StringBuffer的常用方法:

  append() insert() replace() indexOf()

    

  StringBuffer类的应用:

     为什么有的时候要用StringBuffer,而不用String:

    String是不可变的,所以要对String作改动不能直接改那个String本身,而是要创建新的String,所以如果改动次数多,用String就效率不高,而StringBuffer(如果是单线程则建议用StringBuilder,不用考虑线程安全性,效率更高点)。有朋友说1.5后StringBuffer和String的拼接性能差不多则不敢苟同,如下测试在我的机器上用JDK1.8测试:
    

 1 public class demo {
 2     public static void main(String[] args) {
 3         long l = System.currentTimeMillis();
 4         String s = "";
 5         for (int i = 0; i < 100000; i++) {
 6             s += "q";
 7         }
 8         System.out.println(System.currentTimeMillis() - l);
 9         System.out.println(s.substring(0, 1));
10 
11         l = System.currentTimeMillis();
12         StringBuffer sb = new StringBuffer();
13         for (int i = 0; i < 100000; i++) {
14             sb.append("q");
15         }
16         System.out.println(System.currentTimeMillis() - l);
17         System.out.println(sb.toString().substring(0, 1));
18     }
19 }

输出:

3870
q
3
q

 

    也就是做10万次拼接,String要3.87秒,而StringBuffer则只要0.003秒,差别还是相当大的。(JDK1.6有9s多的差距)

 

4、StringBuilder

  一个可变的字符序列,该类被设计作用StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候,建议优先考虑该类,速度比StringBuffer要快

     但如果涉及到线程安全方面,建议使用StringBuffer

    常用方法:

  append() insert() …

posted on 2019-04-29 21:52  Co3y  阅读(507)  评论(0编辑  收藏  举报

导航