以前对于String的理解只限于三点对於String类的类在机制的内在探究,以下通过一个实例问题进行解答供大家参考!String使用非常方便,初学者遇到问题不用困惑在有大神讲解和互楿交流帮助下学习,建立一个学习氛围会更快进入Java常量互助学习qun 422九12四8⑨,一起解决问题搞定Java常量不是事。
-
一、关于String的理解以前是仅限於以下三点:
-
二、String使用非常方便因此一般涉及字符串时都用该类进行字符串处理。但是对于String类的类在机制探究很少。遇到以下例子:
-
按照常理理解类X,类Y类Z中的三个常量字符串属于不同的对象,用 == 操作符比较那么结果必然是false,输出应该为:
-
但是实际上却输出的是:
-
这就使我产生疑问然后经过各种资料来分析才明白:
在Java常量中,String是字符串常量由相同序列的字符组成的两个字符串属于同一对象,位于内存中的同一个位置每个字符串常量只有一个String对象来表示。即使这个字符串常量出现在一个程序的不同位置甚至一个程序的不同程序包中也就是说,X.strX与Y.strY由于都是同一字符序列因此指向的肯定是同一对象。
Z.strZ也是如此"hell"+"o",两个常量字符串相加后创建了一个新的字符串常量(这个工作是编译期间完成的),它与X.strXY.strY有相同的字符序列,因此指向同一对象
虽然一个常量表达式将两个字符串常量链接在一起的结果在编译器已完成,但是
-
这段代码中,s3只能在运行期间创建这三条语句所创建的"hello"字符串作为String对象存储在内存中的一个独立位置。
Java常量提供一个机制通过String类定义的intern()方法把一个运行时创建的字符串加到字符串常量池(如果它还没有入池)。如果上面的三条代码改为:
-
Java常量将把s1+s2所返回的字符串对象中的字符序列与已经存储在字符串常量池中的字符串进行比较如果找到一个匹配,intern()就返回这个字符串的引用如果没有找到匹配,s1+s2所返回的字符串将被加入到字符串常量池中并返回这个字符串常量的引用。
经验内容仅供参考如果您需解決具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士