潭州Java中级班(day_14)-String,Stringbuffer,Stringbuilder

 

1. String


 

  • String类代表字符串。 Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。
  • 字符串不变; 它们的值在创建后不能被更改。 字符串缓冲区支持可变字符串。 因为String对象是不可变的,它们可以被共享。

 

 


 

重点知识点:

字符串与字节字符数组之间的转换

    toCharArray()

valueOf(char[] data, int offset, int count)

substring(int beginIndex, int endIndex)

replace(CharSequencetarget,CharSequence replacement)

length()

indexOf(int ch)

isEmpty()

split(String regex)

endsWith(String suffix)

concat(String str)

trim()

compareTo()

 

String常用的属性和方法


 

 

package StringStringbufferStringbuilder;

public class demoString {
    public static void main(String[] args) {
        //to_Array();
        test_method();
    }
    
    public static void to_Array() {
        String string="育奕育曦";
        char[] cs=string.toCharArray();//字符串变成字符数组
        System.out.println(cs);
        String string2=String.valueOf(cs);//字符数组变成字符串
        System.out.println(string2);
    }
    
    public static void test_method() {
        String string="ABCDEABCDE";
        int index=string.indexOf('A');//字符对应的下标
        System.out.println("index:"+index);
        
        int index2=string.indexOf('A',3 );//从1下标开始找
        System.out.println(index2);
        
        boolean    bn=string.isEmpty();
          System.out.println("判断str字符串是否为空:"+bn);
          
        //返回指定字符的最后一次出现的字符串中的索引。 
          int       it=string.lastIndexOf('C');//字符对应的下
          System.out.println("it="+it);
          
          int       length=string.length();
          System.out.println("length="+length);
          
          String      ss=string.replace('A', '水');
          System.out.println("ss="+ss);
          
          
          boolean     bnn=string.startsWith(ss, 'A');
          System.out.println("bnn="+bnn);
          
          String      string3=string.substring(1);
          System.out.println("string="+string3);
          
          String      string4=string.substring(1,3);//1:起始下标,   3:重点下标,但是不包括下标。
          System.out.println("string4="+string4);
          
          String      string5=string.toLowerCase();//将所有的字母都小写
          System.out.println("string5="+string5);
          
          String      string6="javase";
          String      string7=string6.toUpperCase();//将所有的字母都大写
          System.out.println("string7="+string7);
          
          
          String      string8="   纸     箱     和       猫    ";//""
          System.out.println("string8="+string8);
          
          //返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。
          String      string9=string8.trim();
          System.out.println("string9="+string9);
    }
}

2. StringBuffer


 

  • 线程安全,同步的,有锁,可变的字符序列。 字符串缓冲区就像一个String ,但可以修改。 在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容。

 

3. StringBuilder


 

  • 一个可变的字符序列。 此类提供与StringBufferAPI,但不保证同步,就是没有锁,那线程就不安全
package StringStringbufferStringbuilder;
/**
 * 这个类主要是讲String,StringBuffer,StringBuilder
 * @author Mike
 * String      :     一个不可变的字符串,效率最低
 * StringBuffer:  线程安全,可变的字符序列.   效率低
 * StringBuilder:  一个可变的字符序列。 此类提供与StringBuffer的API,但不保证同步,线程不安全。效率高
 */
public class demo01 {

    public static void main(String[] args) {
//        StringBuffer stringBuffer=new StringBuffer();
//        
//        stringBuffer.append("育奕 ");
//        stringBuffer.append("育曦 ");
//        stringBuffer.append("Mike");
//        
//        System.out.println(stringBuffer);
//        
//        int a=stringBuffer.capacity();//返回当前容量。 
//        System.out.println("stringbuffer的容量是:"+a);
//        
//        int b=stringBuffer.charAt(0);//返回 char在指定索引在这个序列值。 
//        System.out.println("stringbuffer的第一个元素是:"+b);
//        
//        stringBuffer.delete(0, 2);//删除此序列的子字符串中的字符。 
//        System.out.println(stringBuffer);
//        
//        stringBuffer.deleteCharAt(0);
//        System.out.println(stringBuffer);//删除 char在这个序列中的指定位置。 
//        
//        
//        stringBuffer.insert(0, "育奕");//在下标0添加字符串
//        System.out.println(stringBuffer);
//        
//        stringBuffer.replace(0, 2, "Allen");//用新的字符串替换下标2到4(不包括4)的字符串对应的字符串
//        System.out.println(stringBuffer);
//        
//        stringBuffer.reverse(); //字符串反转
//        System.out.println(stringBuffer);
//        
//        stringBuffer.setCharAt(0, '醋');//替换下标0对应的字符串
//        System.out.println(stringBuffer);
        
        //testStringBuffer();//644
        
        //testString();//27899
        
        testStringBuilder();//20
    }    
        public static void testStringBuffer() {
            StringBuffer stringBuffer=new StringBuffer("育奕");
            //获取当前时间毫秒数
            long start=System.currentTimeMillis();
            for (int i = 0; i < 10000000; i++) {
                stringBuffer.append("育奕");
            }
            //获取当前时间毫秒数
            long    end=System.currentTimeMillis();
            System.out.println("StringBuffer添加100000个YUYI:"+(end-start));
        }
        
         /**
         * 这就是String添加100000个南浔花去的时间
         */
        public    static    void    testString(){
                 
                 String    string="育奕";
                 //获取当前时间毫秒数
                 long    start=System.currentTimeMillis();
                 for(int  i=0;i<100000;i++){
                           string=string+"育奕";//创建10万堆
                 }
                 //获取当前时间毫秒数
                 long    end=System.currentTimeMillis();
                 System.out.println("String添加100000个南浔:"+(end-start));
        }
        
        public   static    void    testStringBuilder(){
                StringBuilder   stringBuilder=new   StringBuilder("育奕");
                //获取当前时间毫秒数
                long    start=System.currentTimeMillis();
                for (int i = 0; i < 100000; i++) {
                          stringBuilder.append("南浔");
             }
                //获取当前时间毫秒数
                long    end=System.currentTimeMillis();
                System.out.println("stringBuilder添加100000个南浔:"+(end-start));
       }
        
}

 


 

 

 

4.String,Stringbuffer,Stringbuilder三者的联系和区别


 

String      :     一个不可变的字符串,效率最低
StringBuffer: 线程安全,可变的字符序列. 效率低 StringBuilder: 一个可变的字符序列。 此类提供与StringBuffer的API,但不保证同步,线程不安全。效率高


 5.==和equals的区别


 

 ==:是比较地址值(就是堆的盒子名)
equals:是比较地址里面的值,就是盒子里面的值。

 

package StringStringbufferStringbuilder;

/*
 * ==:是比较地址值(就是堆的盒子名)
 * equals:是比较地址里面的值,就是盒子里面的值。
 */

public class demo01Equals {
    public static void main(String[] args) {
        String string1="育奕";
        String string2="育奕";//首先去找,如果有,就不生成新的,如果没有,就生成新的。
        
        String string3=new String("育奕");
        String string4=new String("育奕");
        
        System.out.println("string1==string2"+(string1==string2));
        System.out.println("string1==string3"+(string1==string3));
        System.out.println("string1==string3"+(string3==string4));
        
        System.out.println("string1.equals(string2)"+string1.equals(string2));
        System.out.println("string1.equals(string3)"+string1.equals(string3));
        System.out.println("string3.equals(string4)"+string3.equals(string4));
        
//                string1==string2true
//                string1==string3false
//                string1==string3false
//                string1.equals(string2)true
//                string1.equals(string3)true
//                string3.equals(string4)true

    }
}

 

 

 

 

 

 

 

 

 

posted on 2018-09-23 22:49  王育奕  阅读(101)  评论(0编辑  收藏  举报

导航