您的位置:首页 > 其它

String 类中常用方法总结

2016-07-05 00:00 525 查看
摘要: Java 基础知识整理(二)——String 类中常用方法总结

String类
A). String类是final类型的,不能被继承,且String是常量,其对象一旦创建完毕就无法改变。当使用‘+’拼接字符串时,会生成新的String对象,而不是向原有的String对象追加内容。 B). String Pool(字符串池)
a). String s = “aaa”;(采用字面值方式赋值)
查找String Pool中是否存在“aaa”这个对象,如果不存在,则在String Pool中创建一个“aaa”对象,然后将String Pool中的这个“aaa”对象的地址返回来,赋给引用变量s,这样s会指向String Pool中的这个“aaa”字符串对象
如果存在,则不创建任何对象,直接将String Pool中的这个“aaa”对象地址返回来,赋给s引用。
b). String s = new String(“aaa”);
首先在String Pool中查找有没有“aaa”这个字符串对象,如果有,则不在String Pool中再去创建“aaa”这个对象了,直接在堆中(heap)中创建一个“aaa”字符串对象,然后将堆中的这个“aaa”对象的地址返回来,赋给s引用,导致s指向了堆中创建的这个“aaa”字符串对象。
如果没有,则首先在String Pool中创建一个“aaa“对象,然后再在堆中(heap)创建一个”aaa“对象,然后将堆中的这个”aaa“对象的地址返回来,赋给s引用,导致s指向了堆中所创建的这个”aaa“对象。使用new的方式创建的对象都是位于堆中的。
c). 使用池是因为在程序中用到String类的情况非常多,为了提高效率,避免空间的浪费,提出了String Pool的概念
d).代码举例:

public class ObjectTest2 {
public static void main(String[] args) {
Object object = new Object();
Object object2 = new Object();
System.out.println(object == object2);
//因为是两个对象,所以地址不一样。false
String str = new String("aaa");
String str2 = new String("aaa");
System.out.println(str == str2);
//在 String pool 中创建了一个对象,而在堆(heap)中创建了两个“aaa”对象。false
String str3 = "bbb";
String str4 = "bbb";
System.out.println(str3 == str4);
//直接就在 String pool 中创建了一个对象。true
String str5 = new String("ccc");
String str6 = "ccc";
System.out.println(str5 == str6);
//在 String pool 中创建了对象,并且在堆中还创建了对象。false
String s = "hello";
String s1 = "hel";
String s2 = "lo";
System.out.println(s == s1 + s2);
//false 但这是为什么?
System.out.println(s == "hel" + "lo");
//光是在 String pool 中创建了对象。true
}
}

C). equals()方法
对于String类的equals()方法来说,它是判断当前字符串与传进来的字符串的内容是否一致。源码如下:

public boolean equals(Object anObject) {
if (this == anObject) {
return true;    //自己跟自己比返回true
}
if (anObject instanceof String) {
String anotherString = (String)anObject;    //先向下转换成String类型,才能使用String类里面的方法。
int n = count;
if (n == anotherString.count) { //if是先判断两个字符串的长度是不是相等
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
//下面这个是把两组字符进行一个一个的比较,如果出现不同的就返回false
while (n-- != 0) {
if(v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;   //表示传进来的参数如果不是字符串的话就返回false
}


对于String对象的相等性判断来说,使用equals()方法,而不要使用"=="。因为一般不会来判断两个字符串是否属于同一个对象。要把equals()方法和"=="区分开。equals()方法也不能一概而论,要分开从Object类和继承了Object类,但是重写了该方法的类来看。并且这个程序里面在重写的时候直接利用了String类里面的equals() 方法。
D)substring
1).substring(int beginIndex)

Examples:

"unhappy".substring(2) returns "happy"
"Harbison".substring(3) returns "bison"
"emptiness".substring(9) returns "" (an empty string)


2).substring(int beginIndex, int endIndex)

"hamburger".substring(4, 8) returns "urge"
"smiles".substring(1, 5) returns "mile"


E). toUpperCase
1). toUpperCase()
转成大写
2). toUpperCase(Locale locale)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: