原著不易,用到的都会粘贴连接。
Object类是所有类,数组,枚举类的父类,也就是说,java允许把所有任何类型的对象赋值给Object类型的变量。创建一个类没有写继承那个父类时,默认继承Object父类。
字符串是一连串的字符序列。
String类是不可变类,一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
StringBuffer对象则是一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过其提供的append、insert、reverse、setCurrent、setLength等方法可以改变这个字符串对象的字符序列。最后可以调用toString方法将其转换为一个String对象大多数用在多个线程。
JDK1.5新增了一个StringBuilder类,它也代表的是字符串对象。它和StringBuffer基本是相似的(构造器和方法基本相同),用在字符串缓冲区被单个线程使用的时候(很普遍)。
public class StringDemo {
public static void main(String[] args) {
String s = new String("acbdfhs");
System.out.println("s.charAt(5): " + s.charAt(5));
}
}
int compareTo(String anotherString):当前String对象与anotherString比较。如果连个字符串的字符序列相等则返回0;不相等时,从两个字符串第0个字符开始比较,返回第一个不相等的字符差,另一种情况,较长字符串的前面部分恰巧是较短的字符串,返回它们的长度差。
第一种情况:字符串1的第一个字符跟字符串2的第一个字符不相等,则两个字符串都按照第一个字符的ASCII码顺序进行比较,其他字符都不用看,并返回一个整型
String str1 = "abcde";
String str2 = "Ilove";
System.out.println(str1.compareTo(str2)); //ASCII码表中来比较。
// a 在ASCII码表中十进制的下标为 97 , I 是 73 ,97比73多24,所以返回 24 。
第二种情况:字符串1的第一个字符如果跟字符串2的第一个字符相等,那么就以两个字符串的第二个字符开始比较,如果还是相等就以第三个字符开始比较……以此类推,直到两个字符串中出现不一样的字符时再比较双方的字典顺序。
String str1 = "abcww";
String str2 = "abc";
System.out.println(str1.compareTo(str2));//返回值为2
String str1 = "abc";
String str2 = "abcdefgh";
System.out.println(str1.compareTo(str2));
intcompareTo(Objiect o):如果o是String对象,和前一个方法一样;否则抛出ClassCastException异常。
String concat(String str):将该String对象与str连接在一起。与字符串连接运算符“+”的功能相同
String str = "abcde";
str = str.concat("123456");
System.out.println(str);//输出abcde123456
boolean contentEquals(StringBuffer sb):将该String对象与StringBuffer对象sb进行比较,当他们包含的字符序列相同时返回为true。
String str = "abc de";
StringBuffer sb = new StringBuffer("abc de");
// StringBuffer sb = new StringBuffer("webhf1");
//boolean b = str.contentEquals(sb); //false
boolean b = str.contentEquals(sb); //ture
System.out.println(b);
static String copyValueOf(char[] data):将字符数组连缀成字符串,与String[char[] content]构造器的功能相同。
static String copyValueOf(char[] data,int offset,int count):将char数组的子数组中的元素连缀成字符串,与String(char[] value,int offset,int count)构造器的功能相同。
char[] charArr = { 'O', 'M', 'P', 'I', 'L', 'E', ' ',
'O', 'N', 'L', 'I', 'N', };
String str = String.copyValueOf(charArr, 8, 3);
System.out.println(str); //返回NLI
太多了,不想写了,自己可以去里面看!!!
boolean equals(Object anObject):将该字符串与指定对象比较,如果1二者包含的字符序列相等则返回ture。否则返回false。
两次new出来的String对象不是同一个对象,所以使用==比较返回false。
用new String()创建的字符串不是常量,不能在编译器就确定,使用newString()创建的字符串不会放入常量池中,它们有自己的地址空间。
常量池(constant pool)指的是在编译器被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类,方法,接口中的常量,也包括字符串常量。
StringBuffer、StringBuilder的length是可变的,可以通过length()和setLeng(int len)方法里访问和修改其字符序列的长度。capacity属性代表了StringBuilder的容量,capacity通常比length大,程序通常无须关心capacity属性。
StringBuilder sb = new StringBuilder();
//追加字符串
sb.append("java");
//插入
sb.insert(0,"hello");
//替换
sb.replace(5,6,",");
//删除
sb.delete(5,6);
System.out.println(sb);
//反转
sb.reverse();
System.out.println(sb);
System.out.println(sb.length());
System.out.println(sb.capacity());
//改变StringBuilder的长度,将只保留前面部分
sb.setLength(5);
System.out.println(sb);
之后会写多线程。
原书籍是:疯狂JAVA讲义