String 类的特点
1. Java程序中,所有双引号字符串,都是String这个类的对象
2. 字符串一旦被创建,就不可更改(如果想更改,只能使用新的对象做替换)
3. 字符串常量池,让我们使用双引号创建字符串对象时,会先去常量池中查找有没有相同内容的字符串对象,如果有,则直接使用该对象,如果没有,则在常量池中创建一个字符串对象,然后再使用该对象
public class StringDemo1 { public static void main(String[] args){ // 1.Java程序中,所有双引号字符串,都是String这个类的对象 String s = "abc"; System.out.println(s); // abc // 字符串一旦被创建,就不可更改(如果想更改,只能使用新的对象做替换) s = "def"; System.out.println(s); // def,字符串一旦被创建,就应该不可更改,这里为什么改变了,这是因为s指向了新的字符串对象"def" // 等价于上面的,s指向了新的字符串对象"def" Student stu = new Student("张三", 20); stu = new Student("李四", 21); System.out.println(stu.getName() + "\t" + stu.getAge()); // 李四 21 // 2.字符串常量池,让我们使用双引号创建字符串对象时,会先去常量池中查找有没有相同内容的字符串对象,如果有,则直接使用该对象,如果没有,则在常量池中创建一个字符串对象,然后再使用该对象 String s1 = "abc"; String s2 = "abc"; // == 比较的是两个对象的地址值是否相同 System.out.println(s1 == s2); // true,因为s1和s2都指向了常量池中的同一个字符串对象"abc" // equals 比较的是两个对象的内容是否相同 System.out.println(s1.equals(s2)); // true,因为s1和s2指向的字符串对象内容相同 } }
这里注意:不同的JDK版本,字符串常量池的位置是不一样的
JDK7版本之前,StringTable是在方法区中
JDK7版本开始之后,StringTable被挪到了堆内存中
String类常见的构造方法
1. public String(): 创建一个空白字符串,里面不包含任何内容
2. public String(char[] chs): 根据传入的字符串数组,创建字符串对象
3. public String(String original): 根据传入的字符串,来创建字符串对象
public class StringDemo2 { public static void main(String[] args){ // public String():创建一个空白字符串对象,不含有任何内容 String s1 = new String(); System.out.println("s1:" + s1); // public String(char[] chs):根据传入的字符数组,来创建字符串对象 char[] chs = {'a', 'b', 'c'}; String s2 = new String(chs); System.out.println("s2:" + s2); // public String(String original):根据传入的字符串,来创建字符串对象 String s3 = new String("abc"); System.out.println("s3:" + s3); } }
字符串对象,两种创建方式的区别
String s1 = "abc";
String s2 = new String("abc");
String类的常见面试题
上面是字符串变量进行拼接,其结果是false,那要是字符串常量进行拼接呢,如下所示:
相当于从字符串池进行对比,其结果应该是true
标签:String,23,对象,s2,s1,字符串,public From: https://www.cnblogs.com/REN-Murphy/p/17927622.html