字符串是一个特殊的对象,从api文档的对string声明:public final class{} 中可以看出该类不可以被继承。
以上是对字符串的描述,接下来通过实例展现string的类型的一些用法:
很多人碰到这个问题:String s = "123"; 这里有几个对象。在这里,s为类类型变量,“123”为一个对象。
变量可以指向对象,所有像“123”字符串都是一个对象,同时s也指向了这个对象。
字符串还有一个特点:就是初始化后就不会被改变。但是很多人会误解这个意思。先看个例子:
在一个类中执行以下代码:
String s ="123";
s = "789";
System.out.println(s); 请问打印出来的是什么?是123还是789。很多人以为既然字符串不会被改变,所以
打印出来的应该是123。
错!打印出来的是789,为什么呢?
这个我们上面说的String s = "123"中的对象有关系。首先,“123”这个对象确实不会改变,它一直会在内存中,
s刚开始指向了“123“这个对象,而后来s指向了”789“这个对象,所以才打印出来789.
还有一个关于String的常见问题:
String s1 = "123";
String s2 = new String("123");
s1==s2 这个会显示true还是false
s1.equals(s2)显示true还是false
答案是第一个为false,第二个为true
第一个是判断2个对象是否相等,答案肯定是不相等。应为s2 new了一个新的对象。
第二个相等是因为equals是判断2个字符串内容是否相同,所以相等。
最后一个可能会让你模糊的问题:
String s1 = "123";
String s2 = "123";
请问s1==s2会显示true还是false
答案是true。首先,”123“是一个在内存中的对象,它不会被改变。当String s2 = "123"的时候,
由于已经有”123“对象了且不会改变。系统就不会再为”123“在开辟一个空间,而是让s2指向 String s1 = "123"
中的”123“。既然s1 s2都指向了相同的对象,所以相等。