1.字符串是一个特殊的对象,用final修饰的类,所有的基本数据类型包装类都是final修饰的类
2.字符串一旦初始化就不可以被改变。
3. String s1 = new String("123"); 这样做,在内存中创建了2个对象,一个是new出来的,一个是字符串对象。
String s2 = "abc"; String s3="abc"; s1==s2;//结果为true :这是因为字符串是一个特殊的对象,创建s1的对象时分配了一个内存空间,创建s3时,先在内存中找有没有相同的字符串对象,如果有则指向这个对象,否则才开辟空间创建字符串对象。
关于字符串常量池,在编译时期已经定义好的(直接用双引号赋值的字符串)字符串存放在字符串常量池中,在运行时期定义的字符串对象(如new或拼接的)存放在堆中,对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。
4.方法:
获取 :
⒈intlength();获取字符串的长度。
⒉charcharAt(int index);获取指定位置的字符,当访问到不存在的角标时,会发生角标越界异常。
⒊根据字符或字符串,获取其首次出现的位置。如果不存在则返回-1。
int indexOf(char str);
int indexOf(String str);
int indexOf(str,int fromindex);从指定位置开始查找
int lastIndexOf(str);最后一次出现的位置
.....
判断:
⒈该字符串是否包含某个子串:contains(String str);
⒉字符串是否为空(原理是判断字符串的长度是否为零):booleanisEmpty();
⒊是否以指定字符串开头:booleanstartsWith(String str);
⒋是否以指定字符串结尾:booleanendsWith(String str);
⒌判断两个字符串内容是否相同:booleanequals(str);
⒍判断两个字符串内容是否相同,忽略大小写:booleanequalsIgnoreCase(String str);
转换:
⒈将字符数组转成字符串:
构造函数:new String (char ch[]); new String(char ch[],int offset,int count);将指定字符数组的一部分转为字符串,offset开始位置,count个数.
静态方法:static String copyValueOf(char ch[]);
static String copyValueOf(char ch[],int offset,int count);
static String ValueOf(char ch[]);
⒉将字符串转成字符数组:
chartoCharArray();
⒊将字节数组转成字符串:
new String(byte bt[]);
new String(byte bt[],String charSet);
new String(byte bt[],offset,count);
⒋将字符串转成字节数组:
byte[]getBytes();
byte[]getBytes(chatSet);
⒌将基本数据类型转成字符串:
static StringvalueOf(int i);
long double float boolean char都可以
替换:
⒈Stringreplace(oldChar,newChar);返回一个新的字符串对象,而调用该方法的字符串对象不会改变,因为字符串对象一旦初始化就不能改变;如果要替换的字符不存在,则返回原来的字符串。
切割:
⒈Strng[] split(String regex);用正则表达式来切割
booleanmatches(String regex);判断该字符串是否满则正则表达式要求。
获取字符串的一部分:
String subString(int begin);
String subString(int begin,int end);包含头不包含尾。
转换,去空格,比较:
⒈将字符串转成大写或小写:StringtoUpper(String str),返回转为小写的字符串。 StringtoLowerCase(str);转大写。
⒉将字符串两端多余的空格去掉:Stringtrim();
⒊对两个字符串进行自然顺序的比较: int compareTo(str);