您的位置:首页 > 编程语言 > Java开发

不可变的String---让你熟悉又陌生

2015-11-16 16:21 316 查看
     一、字符串简介

     Java语言中用于描述最常见的字符串数据的对象。在Java语言中,字符串数据都是一个对象,但是字符串数据一旦初始化就不可以被改变了。String类中每一个看起来会修改String值得方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。而最初的String对象则丝毫未动,如下例所示

public class Immutable {

public static String upcase(String s) {
return s.toUpperCase();
}
public static void main(String[] args) {
String q = "howdy";
System.out.println("q:"+q);
String qq = upcase(q);
System.out.println("qq:"+qq);
System.out.println("q:"+q);
}

}    当把q传给upcase()方法时,实际传递的是引用的一个拷贝。其实,每次把String对象作为方法的参考时,都会复制一份引用,而引用所指的对象其实一直待在单一的物理位置上,从未动过。
    回到upcase()的定义,传入其中的引用有了名字s,只有upcase()运行的时候,局部引用s才存在。一旦upcase()运行结束,s就消失了。当然了,upcase()的返回值,其实只是最终结果的引用。这足以说明,upcase()返回的引用已经指向了一个新的对象,而原本的q则还在原地。

    字符串对象都存储在常量池中,叫做字符串常量池。通过String str = "str"定义字符串时,str相当于c的指针,"str"就是字符串常量,当定义一个字符串对象时就会先去常量池里找,如果找到就使用,如果找不到就创建。

    二、字符串的创建方式

1.String str ="";

        2.String str = new String("");创建时,走的是对内存,在堆内存中创建一个String类的对象,并在常量池创建了“对象”。

    三、字符串的比较

对于字符串的比较应该使用equals方法,String类覆盖了Object类中的方法,比较的是字符串内容是否相同,在基本数据中用==比较,对象的比较则使用equals方法。

当利用+号连接的两个字符串生成一个字符串时产生的效果与一次性定义的效果是相同的。

   对于字符串的简介就到这了,谢谢阅读!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  String 字符串 java