String、StringBuffer、StringBuilder类
String、StringBuffer、StringBuilder类:java提供了string、stringbuffer两个类来封装字符串,并提供了一系列方法来操作字符串对象。
String类是不可变的类,一旦一个string对象被创建之后,包含在这个对象的字符序列式不可变的。
StringBuffer则代表一个字符序列可变的字符串,通过StringBuffer提供的append、insert、reverse等方法可以改变这个字符串对象的字符序列。
StringBuilder类:和StringBuffer基本相似,不同的是,StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。
String类提供了大量构造器来创建对象,其中如下几个有特殊用途:
1、String():创建一个包含0个字符串序列的string对象(并不是返回null)
2、String(byte[] bytes,Charset charset):使用指定的字符集将指定的byte数组解码成一个新的String对象。
3、String(byte[] bytes,int offset,int lengh):使用平台的默认字符集将指定byte数组的offset开始,长度为length的子数组解码成一个新的String对象。
4、String(byte[] bytes,int offset,int lengh,String chasetName):使用指定的字符集将指定byte数组的offset开始,长度为length的子数组解码成一个新的String对象。
5、String(byte[] bytes,String chasetName):使用指定的字符集将指定的byte数组解码成一个新的String对象。
6、String(chasr[] value,int offset,int count):将指定字符串数组从offset开始,长度为length的子数组中的字符串连缀成字符串。
7、String(String original):根据字符串直接量来创建一个string对象。
8、String(StringBuffer buffer):根据StringBuffer对象来创建对应的string对象。
9、String(StringBuilder builder):根据StringBuilder对象来创建对应的string对象。
下面是对字符串进行操作的方法:
1、char [] charAt(int index):取字符串中指定位置的字符。
2、int compareTo(String anotherString):拿当前对象和anotherString比较,如果两个字符串序列相等则返回0,;不相等时,从两个字符串第0个字符串开始比较,返回第一个不相等的字符差,另一种情况是,较长字符串的前面部分刚好是较短的字符串,返回它们的长度差。
3、String concat(String str):将该string对象与str连接在一起,与字符串连接运算符 + 功能相同。
4、boolean contenEquals(StringBuffer sb):将该string对象与sb进行比较,若它们包含的字符序列相同则返回true。
5、static String copyValueOf(char[] data):将字符数组连缀成字符串。
6、static String copyValueOf(char[] data,int offset,int count):将char数组的子数组中的元素连缀成字符串。
7、boolean endsWith(String aabb):返回该对象是否以aabb结尾。
8、boolean equals(Object obj):将字符串与指定对象比较。
9、boolean equalsIgnoreCase(String str):与前一个方法相同,只是忽略大小写。
10、byte[] getBytes():将该string对象转换成byte数组。
11、void getChars(int srcBegin,int srcEnd,char[] det,int detBegin):该方法将字符串中从srcBegin开始,到srcEnd结束的字符复制到dst字符数组中,其中detBegin为目标字符数组的起始复制位置。
12、等等。。。。。
"hello"和new String("hello")的区别:
常量池指的是在编译期被确定、并被保存在已编译的.class文件中的一些数据,包括关于类、方法、接口中的常量和字符串常量。
String a=”ab”;
String b=”cd”;
String c=”abcd”;
String d=”ab”+”cd”;
String e=a+b;
String f=new string (“ab”);
c==d(√)
f==a(×)
c==e(×)——>e指向的是a、b的复合地址,c和d指向的是“abcd”的地址.
java会确保每个字符串常量只有一个,不会产生对个副本