java毕向东听课笔记17(字符串1)

来源:互联网 发布:淘宝店一般能赚多少钱 编辑:程序博客网 时间:2024/05/01 12:34

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指向了同一片内存地址。

0 0