String的注意事项

不可变字符串对象

不可变?它肯定可变啊,比如

package string;  
  
public class StringDemo3 {  
    public static void main(String[] args) {  
        String name = "yingyu5658";  
        name += ".cn";  
        name += "域名";  
        System.out.println(name);  
  
    }  
}

这时候把name打印出来不就是yingyu5658.cn域名了吗? 每次试图改变字符串对象实际上是新产生可字符串对象,变量每次都与指向了新的字符串对象,之前字符串对象的内容确实是没有改变的,因此说String的对象都是不可变的。

第二点注意事项

示例代码:

package string;  
  
public class StringDemo3 {  
    public static void main(String[] args) {  
        String s1 = "abc";  
        String s2 = "abc";  
        System.out.println(s1 == s2);  
        //true  
    }  
}

这里使用双等来判断两个变量的地址是否相同,返回结果为true,也就是说,地址是相同的。 原理:上文提到,双引号包裹住的字符串,会被保存到字符串常量池中,且相同的字符串只存储一份。这里我们声明了两个内容为abc的String类型变量。Java是很聪明的,当我们把s2声明,它要存到字符串常量池时,看到内容一样,就不再存了,而是把s2也指向abc,因此s1地址和s2地址是一样的。

new

示例代码:

package string;  
  
public class StringDemo3 {  
    public static void main(String[] args) {  
        char[] chars = {'a','b','c'};  
       String a1 =  new String(chars);  
       String a2 =  new String(chars);  
        System.out.println(a1 == a2);  
        //false  
    }  
}

上文提到,每new一次就会创建一个新的对象,所以此时再比较两者地址,返回false,是不同的。