string、stringbuffer、stringbuilder的区别? -欧洲杯足彩官网

`
hbxflihua
  • 浏览: 653112 次
  • 性别:
  • 来自: 杭州
最近访客
博主相关
  • 博客
  • 微博
  • 相册
  • 收藏
  • 社区版块
    • ( 0)
    • ( 0)
    • ( 1)
    存档分类
    最新评论

    string、stringbuffer、stringbuilder的区别?

      博客分类:
    • java

    java的基本类型有八种,三大类:

    字符型:char

    布尔型:boolean

    数值型:byte、short、int、long、float、double,前四种整型,后面两种浮点型

     

    java八种基本类型的包装类和string都是immutable类,被声明为final class,所有的属性也都是final的。

    由于string的不可变性,它的拼接、剪裁都会产生一个新的对象。由于字符串操作的普遍性,相关操作的效率往往对性能有明显的影响。

      

    stringbuffer是为解决string因拼接而产生过多的中间对象问题而提供的一个类,可用通过stringbuffer的append、add等方法来对字符串进行操作。stringbuffer是线程安全的可修改字符串序列,它通过在方法上加上synchronized关键字来保证线程安全,但随之也带来了额外的性能开销,所以除非有线程安全的需要,否则还是推荐使用stringbuilder。

     

    stringbuilder在能力上和stringbuffer没有区别,但是它去掉了线程安全的部分,有效减小了性能开销。

     

    为了实现修改字符序列的目的,stringbuffer 和 stringbuilder 底层都是利用可修改的(char,jdk 9 以后是 byte)数组,二者都继承了 abstractstringbuilder,里面包含了基本操作,区别仅在于最终的方法是否加了 synchronized。

    另外,这个内部数组应该创建成多大的呢?如果太小,拼接的时候可能要重新创建足够大的数组;如果太大,又会浪费空间。目前的实现是,构建时初始字符串长度加 16(这意味着,如果没有构建对象时输入最初的字符串,那么初始值就是 16)。我们如果确定拼接会发生非常多次,而且大概是可预计的,那么就可以指定合适的大小,避免很多次扩容的开销。扩容会产生多重开销,因为要抛弃原有数组,创建新的(可以简单认为是倍数)数组,还要进行 arraycopy。

     

    string在java6提供了intern()方法来缓存字符串,由于在java6缓存的字符串被存放在永久代里,使用不当很容易导致oom。在后续版本中,这块缓存区域被放在了堆中,这块区域被称为字符串常量池。

     

     

    这段代码在不同的java版本中运行会输出什么? 

    	public static void main(string[] args) {
    		string s = new string("1");
    		s.intern();
    		string s2 = "1";
    		system.out.println(s == s2);
    		string s3 = new string("1")   new string("1");
    		s3.intern();
    		string s4 = "11";
    		system.out.println(s3 == s4);
    	}

     参考:

    分享到:
    |
    评论

    相关推荐

      string,stringbuffer,stringbuilder区别。几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关 工具如拼接类的使用,对写出高质量代码是非常有帮助的

      string stringbuffer和stringbuilder 区别之源码解析 从源码角度简单对它们之间的区别进行了验证

      string、stringbuilder和stringbuffer的区别 string、stringbuilder和stringbuffer的区别 string、stringbuilder和stringbuffer的区别

       stringbuffer:字符创变量  stringbuilder:字符创变量  从上面的名字可以看到,string是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:

      下面小编就为大家带来一篇浅谈java中string stringbuffer stringbuilder的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

      介绍了string、stringbuffer、stringbuilder的使用方法,以及理论知识

      string及stringbuffer和stringbuilder的区别

      string ,stringbuffer与stringbuilder的区别

      简单的介绍了string、stringbuffer和stringbuilder的区别

      stringbuilder用法 string、stringbuilder、stringbuffer 用法比较string、stringbuilder、stringbuffer 用法比较string、stringbuilder、stringbuffer 用法比较string、stringbuilder、stringbuffer 用法比较string...

      目录stringstringbuffer与stringbuilder总结 string ...stringbuffer与stringbuilder 这两者基本相似,都是可变字符串对象,主要区别为线程是否安全。 总结 最后,引用菜鸟教程下的总结以及相关评论: s

      关于string、stringbuilder、stringbuffer的本质区别,

      string,stringbuffer,stringbuilder

      string、stringbuilder以及stringbuffer的区别

      string,stringbuffer,stringbuilder

      java中string、stringbuffer、stringbuilder是编程中经常使用的字符串类,他们之间有什么区别呢?下面小编给大家总结了java中string、stringbuffer、stringbuilder的区别详解,需要的朋友参考下吧

      主要介绍了java 中 string,stringbuffer 和 stringbuilder 的区别及用法的相关资料,需要的朋友可以参考下

      主要介绍了java 中string和stringbuffer与stringbuilder的区别及使用方法的相关资料,在开发过程中经常会用到string 这个类进行操作,需要的朋友可以参考下

      java中string,stringbuffer与stringbuilder的区别和用法。

      string,stringbuilder,stringbuffer

    global site tag (gtag.js) - google analytics
    网站地图