1.String类代表字符串String是一个final类,代表不可变序列,字符串是常量,用双引号引起来,它的值在创建后不可以更改,String对象的字符的内容是存储在一个字符数组value[]中。
String s1 = "123" //用字面量的定义方式 //字面量放在方法区,字符串常量池 2.String对象的创建
String str = "hello"; //本质上this.value = new char[0]; String s1 = new String(); //this.value = original.value; String s2 = new String(String original); 通过字面量的方式数据存储在方法区中
通过new的方式是存放在堆中,然后在方法区中存放数据。
字符串常量存储在字符串常量池,目的是共享
字符串非常量对象存储在堆中。
3.字符串的特性
(1)常量与常量的拼接结果就在常量池,且常量池中不会存在相同的内容。
(2)只要其中有一个是变量,结果就在堆中。
(3)如果拼接的结果调用inter()方法,返回值就在常量池中。
inter()方法的使用,如果之前已经创造出使用该方法的字符串,则返回字符串的引用,如果没有在字符串常量池中创建该字符并返回字符串的地址。
4.String使用的注意点
String s1 = "a"; 在字符串常量池中创建了一个字面量为'a'的字符串。
s1 = s1 + "b"; 实际上原来的字符串“a”字符串已经丢失了,现在在堆空间中产生了一个字符串s1+"b",(也就是“ab”)。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象留在内存中,降低效率,这样的操作放在循环中会很大的影响效率。
String s2 = "ab"; 说明:直接在字符串常量池中已经创建一个字面量为“ab”的字符串。
String s3 = "a"+"b";
s3指向字符串常量池中已经创建的“ab”的字符串。
String s4 = s1.inter(); 堆空间的s1对象在调用inter()方法后,会将常量池中已经存在的“ab”字符串赋值给s4;
5.String 常用方法
①int lengt()返回字符串的长度
②char charAt(int index)返回某索引处的字符
③boolean isEmpty()判断是否是空字符串
④String toLowerCase()将String中的字母全部转换成小写
⑤String toUpperCase()将String中的字母全部转换成大写
⑥String trim()返回一个字符,忽略大小写
⑦boolean equals(Object obj)比较两个字符的内容
⑧boolean equalsIgnoreCase(String anotherString)忽略大小写进行内容的比较
⑨String concat(String str)进行字符串的连接。