String类型详解

来源:互联网 发布:网络名誉侵权案例 编辑:程序博客网 时间:2024/06/13 23:52

字符串是一个特殊的对象,从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都指向了相同的对象,所以相等。


0 0
原创粉丝点击