必须了解的String知识点
1.关于不可变类String,String对象声明后将不可修改
比如说String a1=“aaa”;对象a1声明之后,不可修改指的是“aaa”这个内容不可被修改,a1还可以指向其他对象。
2.String对象太常用了,为了提高String的效率,在程序中提供了“缓存”技术,只要是双引号中的内容,都会在字符串常量符中创建一份,如果以后需要使用此对象,不需要再创建直接用字符串常量池中的即可。
3.字符串常量池就是一个缓冲区,目的是为了提高访问字符串的效率。
4.例题
package comC;
/*
-
双等号两边的对象如果是引用类型,那么比较的一定是地址
-
*/
import java.lang.String;
public class StringTest {
public static void main(String[] args) {String s1="Hello";//Hello的位置是在字符串常量池中创建的(字符串常量池位于方法去内存中) String s2="Hello";//字符串常量池中已经有了,直接拿来用,所以两个对象地址相同 System.out.println(s1==s2);//这样比较是不符合规矩的 String s3 = new String("Word");//new创建对象是在堆内存中 String s4 = new String("Word");//同理,所以两对象不可以用==号比 System.out.println(s3==s4);//不可以 /* 警告:比较两个字符串是否一致,必须使用String类提供的equals方法 */ System.out.println(s3.equals(s4));//正确的比较方法 /* equals方法来自于Object,在Object中比较的是地址,在String中对equals进行了重写,重写之后比较的是内容。 */ //以下程序结束后会在字符串常量池中创建3个字符串对象 String a1="abc"; String a2="def"; String a3=a1+a2;//不推荐使用+进行字符串连接,浪费字符串常量池的空间
}
}
eclipse运行结果:
第一个结果为true,第二个结果为false,第三个结果为true,你能知道至三个结果是为什么就证明你学会了。