(1) String使用private final char value[] 来实现字符串的存储,也就是说,String对象创建之后,就不能再修改此对象中存储的字符串内容,就是因为如此,才说String类型是不可变的。
(2)String类有一个特殊的创建方法,就是使用“ ”双引号来创建。例如new String(“jinder”)实际创建了2个String对象,一个是“jinder”通过“ ”双引号创建的,另一个是通过new创建的。只不过它们创建的时期不同,一个是编译期,一个是运行期。
(3)Java对String类型重载了加号(+)操作符,可以直接使用“+”对两个字符串进行连接。
(4)运行期调用String类的intern()方法可以向String Pool中动态添加对象。
(5)String的创建方法一般有如下几种:
a.直接使用“”引号创建。
b.使用new String()创建。
c.使用new String(“someString”)创建以及其他的一些重载构造函数创建。
d.使用重载的字符串连接操作符“+”创建。
java中string与char如何转换
String abc = "absdsfwer";
char ch[] = abc.toCharArray(); //string转char
String c = new String(ch); //char 转string
string.trim() 去除守尾字符;
string.subString(int start,int end) 子字符串,范围为start-end-1;
String与StringBuffer的区别
1.String的创建
String s=“hello”;
JVM先根据内容“hello”查找对象,如果没有找到,则在heap上创建新对象,并将其赋予s1,否则使用已经存在的对象。
String s = new String("hello");
JVM直接在heap上创建新的对象,所以在heap中会出现内容相同而地址不同的String对象。
2.String对象的比较
3.StringBuffer面试关键点:
a.简单地认为.append()效率好于“+”是错误的。
b.不要使用new创建String。多用“ ”创建。
c.注意.intern()的使用,将string对象加入常量池。
d.在编译期能够确定字符串值的情况下,使用“+”效率最高。
e.避免使用“+=”来构造字符串。因为String是不可变对象(是线程安全的),每次“+=”操作都会构造新的String对象。
f.在声明StringBuffer对象的时候,指定合适的capacity,不要使用默认值(18)。可以避免复制数组的开销。
g.注意以下两者的区别,后者开辟了两个内存段。
- String s ="a" +"b";
String s = "a"; s +="b";
String s = new String("abc");
"abc"本身就是pool中的一个对象,而在运行时执行new String()时,将pool中的对象复制一份放到heap中,并且把heap中的这个对象的引用交给s持有。这条语句就创建了两个String对象。