定义字符串常量(字符串常量)

你们好,最近小未来发现有诸多的小伙伴们对于定义字符串常量,字符串常量这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。

1、 第一,对字符串的理解过去仅限于以下三点:

2、 1.String是最终类,不能被继承;

3、 2.字符串类在比较字符串是否相等时不能使用“==”,只能使用“equals”;

4、 3.不能更改字符串类。

5、 第二,String使用起来非常方便,所以这个类一般用于涉及字符串时的字符串处理。而对于字符串类的类存在机制的研究却很少。遇到了下面的例子:

6、 根据常识,X类、Y类、Z类中的三个常量字符串属于不同的对象。如果用==运算符比较它们,结果一定是false,输出应该是:

7、 但它实际输出的是:

8、 这让我很疑惑。然后经过各种数据分析了解到:

9、 ==只有当两个比较对象指向同一个对象时,它们的值才为true。X.strX==Y.strY和X.strX==Z.strZ的测试结果都为真,说明这三个常数都指向同一个对象。

10、 在Java中,字符串是字符串常量。由相同字符序列组成的两个字符串属于同一个对象,并且位于内存中的相同位置。每个字符串常量仅由一个字符串对象表示。

11、 甚至这个字符串常量出现在一个程序的不同位置甚至出现在一个程序的不同包中。也就是说,因为X.strX和Y.strY都是同一个字符序列,所以必须指向同一个对象。

12、 Z.strZ. Hell' 'o '也是,在添加两个常量字符串后,又创建了一个新的字符串常量(这项工作是在编译时完成的),它的字符序列与X.strX和Y.strY相同,

13、 因此指向同一个对象。

14、 虽然链接two字符串常量的常量表达式的结果已经在编译器中完成,

15、 在这段代码中,s3只能在运行时创建。由这三个语句创建的“hello”字符串作为一个字符串对象存储在内存中的一个独立位置。

16、 Java提供了一种机制,通过String类定义的intern()方法将运行时创建的字符串添加到字符串常量池中(如果它还不在池中)。如果上述三个代码更改为:

17、 Java将比较s1 s2返回的字符串对象中的字符序列和已经存储在字符串常量池中的字符串。如果找到匹配,intern()返回对该字符串的引用。如果没有找到匹配,

18、 s1 s2返回的字符串将被添加到字符串常量池中,并返回对此字符串常量的引用。

19、 这就解释了为什么X.strX==(s1 s2)返回false,而X.strX==(s1 s2)。intern()返回true。

20、 (s1 s2)。intern()指向strx,Stry,strx指向字符串常量‘你好’。以上分析给你一个参考。

以上就是字符串常量这篇文章的一些介绍,希望对大家有所帮助。

免责声明:本文章由会员“丁原”发布如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系

丁原
免责声明:本文章由会员“丁原”发布,如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务;如因作品内容、版权和其他问题请于本站联系