StringBuilder

第二篇

StringBuilder:可变字符串类型(字符串:底层是字符数组,及其对数组的操作)

特点:

(1)此类型是final修饰的

(2)没有重写equals方法

(3)此类型提供的大多数方法都带有返回值,

即:  return this  返回同一个地址

构造器:

   StringBuilder()

      构造了一个空的StringBuilder对象,初始容量为16。

   StringBuilder(String str)

      创建一个指定字符串的StringBuilder对象

常用方法

   int length():返回有效字符的长度。

   StringBuilder append(Type a):

      将参数a追加到StringBuilder对象里,返回此对象

 

   StringBuilider insert(int index,Type a);

      将参数a插入到对象的下标index处

 

   StringBuilder  delete(int start,int end);

删除此对象里的部分字符,从start开始,到end结束,注意:包前不包后

   

   StringBuilder replace(int start,int end,String str);

      使用str替换此对象从start开始到end结束的子串

 

   StringBuilder reverse():

      将StringBuilder对象的内容进行翻转

 

StringBuffer:此类与StringBuilder用法一模一样。

但是:

         在线程安全上考虑:

         StringBuffer线程安全

         StringBuilder线程不安全

         在执行效率上:

         StringBuffer效率低

         StringBuilder效率高  

练习:测试两种类型的效率高低。

package com.hyxy.se.day02;

public class TestDemo01 {
	public static void main(String[] args) {
		
		StringBuffer str=new StringBuffer("h");
		StringBuilder str1=new StringBuilder("h");
		
		long t1=System.currentTimeMillis();
		for(int i=0;i<1000000;i++){
			str.append("h");
		}
		long t2=System.currentTimeMillis();
		
		long t3=System.currentTimeMillis();
		for(int i=0;i<1000000;i++){
			str1.append("h");
		}
		long t4=System.currentTimeMillis();
		System.out.println("用时:"+(t2-t1));
		System.out.println("用時:"+(t4-t3));
		
		
	}
}

String类型:(底层是字符数组+对数组的操作)

特点:

(1)是不可变的字符串类型,(不可变:对象的内容不能更改)

(2)final修饰的类型

(3)字符下标(索引/index)从0开头

(4)重写了equals方法和toString方法而其他两个没有重写equals方法

(5)默认使用的是unicode字符集,任意字符都占两个字节。

构造器://解码用构造器,编码用getbyte

  String():

    创建一个空字符序列的字符串对象

  String(byte[] bs)

    创建一个字符串对象。使用默认字符集进行解码的字符串。

  String(byte[] bs,String charset)

    将字节数组使用指定字符集进行解码成相应的字符串对象

  String(char[] ch)

    将字符数组转换成字符串对象

  String(String str) 

    指定一个字符串字面量创建一个字符串对象

常用方法:

  int length()://数组的length是属性,这个是方法

    返回字符串对象的字符个数

  char charAt(int index):

    返回此字符序列中指定索引处的字符

  String concat(String another):

    将指定字符串another拼接到此字符序列的末尾,返回新对象

  boolean stratsWith(String prefix)/endsWith(String suffix)

    查看此字符序列是否以prefix为前缀/以suffix为后缀

  byte[] getBytes():

    将此字符串按照默认字符集编码成字节序列,返回一个新的字节数组

  byte[] getBytes(String charset)

将此字符串按照指定的字符集编码成字节序列,返回新的字节数组

查找字符串中的字符/子字符串的位置

  int indexOf(int ch)

    返回字符ch在此字符串中第一次出现的下标(索引/位置)

  int intexOf(int ch,int fromIndex):

    返回字符ch从此字符串fromIndex下标开始,往后第一次出现的位置

  int indexOf(String str):

  int indexOf(String str,int fromIndex)

     注意:返回-1,说明要找字符/子字符串 不存在查找序列中

  int lastIndexOf(int ch);

  int lastIndexOf(String str)

  int lastIndexOf(int ch,int endIndex)

  int lastIndexOf(String str,int endIndex)

查找字符/子字符串截止到某一下标时,最后一次出现的位置。

上述四个方法

      查找字符/子字符串在此字符序列中最后一次出现的位置,找不到返回-1

截取子字符串的方法

  String substring(int beginIndex)

         从此字符序列的beginIndex开始截取,截取到最后

  String substring(int beginIndex,int endIndex)

         从此字符序列的beginInde开始截取,截取到endIndex,包前不包后

 

字符串转成字符数组的方法

  char[] toCharArray()

        将此字符序列变成字符数组 

 

字符串中的字母转成大写/小写

  String toUpperCase()

        将字符串中的字母都变成大写,返回新字符串

  String toLowerCase()

        将字符串中的字母都变成小写,返回新字符串

前后去空格的方法

  String trim()

        去掉此字符序列的前与后的空格

将任意参数变成字符串对象

  static String valueOf(Type v);

    将参数v变成字符串对象       

equals方法与==的区别

  ==:用来比较是不是同一个对象

  equals:用来比较两个对象的内容是否相同

String类型中重写了equals方法

 

常量池:

jvm在使用字符串类型时,为了提高内存的使用率,当使用字面量(常量)进行给变量赋值时,在方法区内提供了用于存储字面量对象的一个常量池。

原理:当使用字面量赋值时,先去方法区内的常量池中查询是否有相同字面量的对象,如果有,就返回常量池中对象的地址,没有的话,在常量池中创建此字面量的对象后再返回。

jdk1.7以后,由于方法区的内存相对较小,将常量池移到堆中

  思考题:内存中有多少个对象

  String s1 = "123";

  String s2 = "456";

  String s3 = s1+s2;

  String s5 = new String("123"+"456");//4个

你可能感兴趣的:(StringBuilder)