新物网

当前位置:首页 > 百科

百科

.net与Java对字符串联解决方案的比较

时间:2023-10-12 18:50:21 雅雅
去java手机软件专题讲座最近和一个朋友用java做了一个多语专用工具,这个人出生在java,我出生在java.net出生,最近逐渐从事java,发现她用Stringbufer解决字符串连接,但我用Stringbuilder。(.Java也有net中介绍的字符串连接类别,所
去java手机软件专题讲座

最近和一个朋友用java做了一个多语专用工具,这个人出生在java,我出生在java.net出生,最近逐渐从事java,发现她用Stringbufer解决字符串连接,但我用Stringbuilder。(.Java也有net中介绍的字符串连接类别,所以它被使用),偶尔,“StringBuffer"它是干什么用的,它和Stringbuilder有什么区别?

1.变量定义字符串连接

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、.只有Stringbuilder在net中,没有Stringbufer,这是非线程安全的。以下属于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,以确保方法调用的原子,即线程安全,这也需要消耗服务器资源。