String s1 = “abc”;其中s1是一个类类型变量,“abc”是一个对象。
字符串最大的特点:一旦被初始化就不可以被改变。
如果在接下来的语句中写出s1= “kk”;只能说明s1的地址变了,指向了“kk”对象,而在内存中,“abc”对象并没有变,所以成为一旦初始化就不可以改变。
----------------------------------------
字符串也可以这样初始化:
String s2 = new String("abc");
例题:判断下列输出结果
class StringDemo{
public static void main(String[] args){
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
}
}
为什么出现这样的结果呢?
分析:第一个毫无疑问,两个对象肯定不相等。重点在第二个,Object类中,equals方法比较的是内存中的地址值,两个对象显然地址值不相等,为什么显示是true呢?
原因在于String类复写了Object类中的equals方法,该方法用于判断字符串是否相同。
问题二:s1和s2有什么区别:
答:s1在内存中有一个对象,s2在内存中有两个对象
问题三:如果出现下列代码,结果如何?
class StringDemo{
public static void main(String[] args){
String s1 = "abc";
String s2 = "abc";
System.out.println(s1==s2);
}
}
解释:在内存中有一个叫做常量池的位置,字符串就会放在里面,当创建s2时,系统发现在常量池中已经存在“abc”对象,所以系统就不再创建新对象,可以节约内存,所以s1和s2指向了同一片内存地址。