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

优点和缺点字符串实现在Java中

2014-08-08 18:41 295 查看
优点和缺点字符串实现在Java中   Java中的String实施   优势   1.Compilation创建唯一的字符串。在编译时,字符串尽可能解决。这包括运用串联运算符和其他文字转换为字符串。所以hi7和(喜+7)都得到在编译时解析到相同的字符串,并符合本类字符串池中相同的对象。编译器会有不同的实现这一目标分辨能力。你可以随时检查你的编译器(例如,通过反编译,涉及串联一些语句)并根据需要改变它。   2。因为String对象是不可变的,一个子操作并不需要复制的字符的整个底层序列。相反,一个子串可以使用相同的字符数组作为原始字符串,只是指在char数组中不同的起点和终点。这意味着子串操作是有效的,即既快速和节约内存;额外的对象是一样的底层字符数组与指针不同成阵列上的包装。
  3.Strings是在JDK实现为一个内部char数组索引偏移量(实际上是一个起始偏移和字符计数)。该基本结构是极不可能在任何Java版本而改变。   4.Strings有国际化的大力支持。这将需要大量的努力来重现一个替代类的国际化支持。   5,与StringBuffers密切的关系使得弦乐参考使用的的StringBuffer相同的字符数组。这是一个双刃剑。对于典型的做法,当你使用一个StringBuffer来操作和追加字符和数据类型,那么最终的结果转换为String,这工作得很好。而这个StringBuffer提供了有效的机制,以不断增长,插入,追加,修改,和其他类型的字符串操作。得到的字符串,然后高效地引用了相同的字符数组,没有额外的字符复制。这是非常快速并且降低了通过避免中间对象被用来最小的对象的数量。但是,如果StringBuffer对象随后被改变,在StringBuffer的char数组被复制到现在的StringBuffer的引用一个新的字符数组。
String对象保留了参照以前共享的char数组。这意味着复制的开销可以在应用程序出现在意想不到的点。取而代之的是复制发生在了toString()方法的调用,可以预料,在StringBuffer的任何后续变动导致新的char数组被创建并要进行数组复制。为了使复制的开销发生在可预见的时间,你可以明确地执行一些方法,使复制发生,如StringBuffer.setLength()。这允许StringBuffers以更可预测的性能被重用。   字符串执行   的缺点是   一禁止能够继承字符串意味着它不能添加行为为String为自己的需求。
  2,前一点意味着,所有的访问都必须通过限制集合的当前可用的String方法,实施额外的开销。   增加的方法,允许高效率的操纵字符串的字符数   3,唯一的办法是将字符复制到自己的阵列,并直接操纵它们,在这种情况下,字符串被征收额外的步骤和额外的对象,你可能并不需要。   4.Char数组更快地直接处理。   5,紧耦合与字符串缓冲区可能会导致意外的高内存使用情况。当StringBuffer的toString()方法创建了一个字符串,当前底层数组保存的字符串,而不管数组(即StringBuffer的容量)的大小。例如,一个StringBuffer的容量为10,000个字符可以建立10个字符的字符串。然而,这10个字符的字符串继续使用10,000
char数组来存储10个字符。如果StringBuffer的现在重复使用,以创建另一个10个字符的字符串,StringBuffer的首先创建一个新的内部10000 char数组来构建字符串;那么新的字符串也使用了10000 char数组来存储10个字符。很显然,这个过程可以继续下去,用其中预计不会大量的内存。   字符串的优势可以概括为易用性,国际化支持,并兼容现有的接口。大部分方法需要一个String对象,而不是一个char数组,字符串对象是由许多方法返回。字符串的缺点归结为缺乏灵活性。有了额外的工作,大多数事情你可以用String对象做可以更快,用更少的中间对象创建开销使用自己的一套字符数组的操作方法来完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: