标签:
String类:
特点:
	1)字符串字面值"hello"可以看做一个字符串对象
	2)字符串是常量,一旦被赋值,就不能被改变。
构造:
	public String()
	public String(byte[] bytes)
	public String(byte[] bytes,int index,int length):表示从该字节数组的offset索引处开始获取length个字节数结合成字符串
	public String(char[] value)
	public String(char[] value,int offset,int count)
	public String(String original)
	------------------------------------------------------------
例1:byte[] bytes = {97,98,99,100,101,102};
	String ss = new String(bytes);
	System.out.println(ss);       //abcdef
	System.out.println(ss.length());   //6
分析:将每一个字节的常量转成字符,然后组成字符串。
	-------------------------------------------------------------
例2:char[] chars = {‘a‘,‘d‘,‘c‘,‘我‘,‘你‘,‘亲‘};
	String ss = new String(chars);
	System.out.println(ss);     //adc我你亲
	System.out.println(ss.length());    //6
	
	String s2 = new String(chars,1,3);
	System.out.println(s2);  //dc我
注意:中文可以用一个字符表示。
	--------------------------------------------------------------
问题:
  String s1 = new String("abcd");
  String s2 = "abcd";
  问:s1与s2产生的方式的区别???(即使用new和不使用new的区别)
  答:从图中看出二者的区别:

字符串直接赋值的方式是先到字符串常量池(方法区内)里面去找,如果有就直接返回,没有,就创建并返回。
  一旦被赋值就不能改变意思是:值不能变,但是引用是可以变的。
 
 字符串如果是变量相加(即字符串连接),先开空间,再拼接。
 字符串如果是常量相加,先加,然后在常量池找,如果有就直接返回,否则,就创建
 
 String s1 = "hello";
 String s2 = "world";
 String s3 = "helloworld";
 System.out.println(s3==s1+s2); //false
 System.out.println(s3=="hello"+"world");//true
 -----------------------------------------------------------------------------------
 字符串的功能:
 1)判断功能:
 boolean equals(Object obj)
 boolean equalsIgnoreCase(Object obj)
 boolean contains(String str) :内部调用indexof(),只要求结果>-1,就表示含有该字符串
 boolean startsWith(String str)
 boolean endsWith(String)
 boolean isEmpty():主要是查看字符串的长度是否为零
 
 String s = "";
 String s1;或者 String s1=null;
 问题:字符串为空和字符串对象为空?
 字符串为空:仅是内容为空,但是对象存在。可以调用String类的方法
 对象为空:没有对象,仅有一个引用,不能调用String类的方法
 s.isEmpty();//true
 s1.isEmpty();//error有异常,Exception in thread "main" java.lang.NullPointerException
 ---------------------------------------------------------------------------------------
 2)String类的获取功能:
 int length()
 char charAt(int index) 获取指定索引处的字符
 int indexOf(int ch)    返回指定字符在此字符串中第一次出现的索引
	为什么这里是int类型,而不是char类型?
	原因:‘a‘和97都可以代表‘a‘,但是由于char类型转int类型可以直接转,而int转char就会出现精度损失,需要强转,而且可能会报错。
	当然,在传参数时可以传一个字符。
 int indexOf(String str)   返回指定字符串在此字符串中第一次出现处的索引
 int indexOf(int ch,int fromIndex) 
 int indexOf(String str,int fromIndex)
 String substring(int start)  从指定位置开始截取字符串,默认到末尾
 String substring(int start,int end) 从指定位置开始到指定位置结束截取字符串(包左不包右)
 
 例:String s1 = "hello";
	int index = s1.indexOf(‘e‘);或int index = s1.indexOf(101);
	System.out.println(index);//1
 ----------------------------------------------------------------------------------------
 3)转换功能
 byte[] getBytes()     转换成字节数组
 char[] toCharArray()   转成字符数组
 static String valueOf(char[] chs)  将一个字符数组转成字符串
 static String valueOf(int i)		把int转成字符串
	该方法可以把任意类型的数据转成字符串
 String toLowerCase()				将字符串转成小写
 String toUpperCase()				将字符串转成大写
 String concat(String str)			 将字符串进行连接
 -------------------------------------------------------------------
 4)替换功能
 String replace(char old,char new)
 String replace(String old,String new)
 
 去掉字符串两边的空格
 String trim()
 按照字典顺序比较两个字符串
 int compareTo(String str)
 int compareToIgnoreCase(String str)
 ----------------------------------------------------------------------
 
 StringBuffer类:final定义的,不能被继承
  如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时又浪费空间,而StringBuffer就可以解决这个问题。
  构造:
   public StringBuffer()
   public StringBuffer(int capicity)
   public StringBuffer(String str)
 
 例如:
 StringBuffer sb = new StringBuffer();
 StringBuffer sb2 = sb.append("hello");
 System.out.println(sb);   //hello
 System.out.println(sb2);  //hello
 System.out.println(sb==sb2); //true 说明他俩指向同一个缓存区
 
 增加功能:返回缓存区被改变后本身
 public StringBuffer append(String str) 可以把任意类型数据添加到字符缓冲区里面,并返回字符串缓冲区本身
 public StringBuffer insert(int index,String str)在指定位置追加字符串到缓冲区
 append每次都在末尾追加,而insert每次都在指定的位置追加
 
 删除功能:返回本身
 public StringBuffer deleteCharAt(int index) 删除指定位置的字符,并返回本身
 public StringBuffer delete(int start,int end)删除从指定位置开始到指定位置结束的内容,并返回本身
 包左不包右
 
 反转功能:对字符串进行反转操作,并返回字符串本身
 public StringBuffer reverse():反转
 
 替换功能:返回缓冲区本身
 public StringBuffer replace(int start,int end,String str):将字符串代替从start开始到end结束截取的字符串
 
 截取功能:唯独截取功能和以上的功能不相同,它的操作并不是返回缓冲区本身,而是一个新的字符串
 public String subString(int start)
 public String subString(int start,int end)
 
 -----------------------------------------------------------------------------------------------------
 String  StringBuffer  StringBuilder相关问题:
 1 String  StringBuffer  StringBuilder三者的区别:
  1)String是内容不可变的,而StringBuffer StringBuilder都是内容可变的
  2)StringBuffer是同步的,数据安全,效率低;而StringBuilder是不同步的,数据不安全,效率高
  
 2 StringBuffer和数组的区别??
  二者都可以看做是一个容器。
  1)虽然StringBuffer可以添加任意类型的数据,但是最终都变成了字符串类型的数据
  2)而数组可以放置多种数据类型,但是必须是同一种类型的数据
 
 3)String 作为形参
    StringBuffer作为形式参数
	注意:String作为形参传递,效果和基本类型作为参数传递是一样的。
	
	形式参数一般情况:
		基本类型:形式参数的改变不影响实际参数
		引用类型:形式参数的改变直接影响实际参数
	
 
 
 
 
	
	
	
	
	
	
String/StringBuffer/StringBuilder基础
标签:
原文地址:http://www.cnblogs.com/zwbg/p/5902948.html