西西软件下载最安全的下载网站、值得信赖的软件下载站!

首页编程开发java → .net与Java中关于字符串连接处理的对比

.net与Java中关于字符串连接处理的对比

前往专题相关软件相关文章发表评论 来源:西西整理时间:2013/4/19 10:50:29字体大小:A-A+

作者:西西点击:1次评论:0次标签: 字符串

  • 类型:电子教程大小:9.5M语言:中文 评分:7.5
  • 标签:
立即下载

最近和一位朋友在利用java做一个多语工具,他是java出身,而我是.net出身,最近刚开始搞java,发现他在处理字符串连接时使用的是StringBuffer,而我使用的是StringBuilder(.net中推荐的字符串连接的类,Java也有这个类,所以就用了),偶,“StringBuffer”是什么东东,它与StringBuilder有什么区别。

一、常量字符串连接

1、.net

例如

string str = "This is " + " a " + "test.";

编译后,我们使用reflector反编译一下,可以看到编译器已经给我们计算出了结果,避免了每次运行都重新计算,提供了效率。

string str="This is  a test.";

例如2、Java

String str=“This is ”+" a "+"test.".

编译后再反射,将得到类似下面的结果。

String abc=new StringBuilder("This is ").append(" a ").append("test.").

即每次运行时都要重新计算一下。

总结:从这点看.net关于常量字符串的处理要比java快,因为它在编译时已进行了计算,运行时就是个常量。

二、StringBuilder和StringBuffer

1、.net中只有StringBuilder,没有StringBuffer,且该类是非线程安全的。以下是msdn中关于StringBuilder在线程安全方面的描述

线程安全
此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

2、JAVA

StringBuffer 字符串变量(线程安全) 
StringBuilder 字符串变量(非线程安全)

两者均继承自AbstractStringBuilder,其内部方法均是对其父类相应方法的调用,可以看作它们均是AbstractStringBuilder的包装类,只不过一个是线程安全的包装(StringBuffer),另一个是线程非安全的包装(StringBuilder)。 

StringBuffer的定义:

public final class StringBuffer

    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{

    public StringBuffer() {
    super(16);
    }

     public StringBuffer(int capacity) {
    super(capacity);
    }

StringBuilder的定义

public final class StringBuilder

    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{

    public StringBuilder() {
    super(16);
    }

    public StringBuilder(int capacity) {
    super(capacity);
    }

下面看一下两者对append(String str)的处理

StringBuffer:

public synchronized StringBuffer append(String str) {

        super.append(str);
        return this;
    }

StringBuilder:

public StringBuilder append(String str) {

        super.append(str);
        return this;
    }

对比以上两部分代码,可以发现两者代码基本一样,都是对父类相应方法的调用,不同的只是StringBuffer多了一个关键字synchronized,保证方法调用的原子性,即线程安全,这是要消耗系统资源的。

总结:多线程环境建议使用StringBuffer,它是线程安全的;单线程或者是多线程但是不存在多个线程同时操纵同一个StringBuilder实例的环境使用StringBuilder。

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)
    推荐文章

    没有数据