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

     一、字符串简介

     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方法。

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

   对于字符串的简介就到这了,谢谢阅读!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值