stringbuilder

转:String StringBuffer StringBuilder区别

倖福魔咒の 提交于 2020-02-27 04:35:33
转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论。还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸裸的站在我们这些Java色狼面前了。嘿嘿.... 众所周知,String是由字符组成的串,在程序中使用频率很高。Java中的String是一个类,而并非基本数据类型。 不过她却不是普通的类哦!!! 【镜头1】 String对象的创建 1、关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world"); 问题是参数"Hello world"是什么东西,也是字符串对象吗?莫非用字符串对象创建一个字符串对象? 2、当然,String类对象还有一种大家都很喜欢的创建方式:String s="Hello world"; 但是有点怪呀,怎么与基本数据类型的赋值操作(int i=1)很像呀? 在开始解释这些问题之前,我们先引入一些必要的知识: ★ Java class文件结构 和常量池 我们都知道,Java程序要运行,首先需要编译器将源代码文件编译成字节码文件(也就是.class文件)。然后在由JVM解释执行。 class文件是8位字节的二进制流 。这些二进制流的涵义由一些紧凑的有意义的项 组成

string与stringbuilder的区别

丶灬走出姿态 提交于 2020-02-27 04:04:22
String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。 例如: string a="a";a+="b";,每次在后面追加都会重新申请一个能放字符串的内存空间; string Interning(字符串驻留)指的是通过维护一张表来存放字符串。CLR内部维护了一个哈希表(Hash Table)来管理其创建的大部分string对象,其中key为string本身,而value为分配给对应string的内存地址。 public static string Intern(string str); public static string IsInterned(string str); 两者的处理机制都是在哈希表中查找是否存在str参数字符串,如果找到就返回已存在的string对象的引用,没有找到,Intern方法将该str字符串添加到哈希表,并返回引用;而IsInterned方法则不会向哈希表中添加字符串,而是返回null; StringBuilder 对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它可容纳的最大字符数指定一个值,当修改 StringBuilder 时,在达到容量之前,它不会为其自己重新分配空间。当达到容量时,将自动分配新的空间且容量翻倍

StringBuffer、StringBuilder

蹲街弑〆低调 提交于 2020-02-27 02:48:45
相信大家都知道StringBuffer、StringBuilder,但是这两个的用法都差不多,到底有什么区别呢,这也是面试的时候问的比较多的一道题,这里我就来说说,这两个的区别结合String来说~   String:查看源码得知,String类的声明是:public final,所以可以很清楚的知道,fianl的话是改变不了的,所以,如果我们用String来操作字符串的时候,一旦我们字符串的值改变,就会在内存创建多一个空间来保存新的字符串,可想而知,一旦遇到复杂的操作,用String是多么低效率的事啊!   所以,一般涉及到字符串操作的,我们一般使用StringBuffer或者StringBuilder,但是这两者都又有什么区别呢,下面我来说说:   查看源码可以得知:     StringBuffer和StringBuilder都集成了AbstractStringBuilder,而StringBuffer大部分方法都是synchronized,也就是线程安全的,而StringBuilder就没有,所以,我们查看API可以知道,StringBuilder可以操作StringBuffer,但是StringBuffer不可以操作StringBuilder,这也是线程的原因; 来源: https://www.cnblogs.com/413xiaol/p/6383832.html

StringBuilder源码分析

橙三吉。 提交于 2020-02-26 16:42:14
StringBuilder源码分析 String,StringBuffer,StringBuilder // 1.String为什么是不可变的 private final char value []; // 2.StringBuilder,Buffer为什么可变 private transient char [] toStringCache ; // 3.StringBuffer为什么是线程安全的 public synchronized StringBuffer append ( String str ) ; // 类的继承实现关系 // StringBuilder -> AbstractStringBuilder -> CharSquence public final class StringBuilder extends AbstractStringBuilder implements java . io . Serializable , CharSequence { 1.字段 /** * The value is used for character storage. */ char [] value ; ​ /** * The count is the number of characters used. */ int count ; 2.构造方法 public

Java之String

三世轮回 提交于 2020-02-26 07:23:38
一、String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的? String是常量,它们的值在创建之后不能更改。(常量的定义:) 因为是常量,对String的+操作的重载存在问题。虽然通过引入StringBuilder优化过String的+,但是在循环中使用时,还是存在性能问题。 循环中StringBuilder的对象创建个数。(使用javap -c 查看 eclipse中使用javap ) public class StringTest { public static void main(String[] args) { String mango = "mango"; String s = "abc"+ mango+ "def"+47; System.out.println(s); } } 如上Java代码用 javap -c Concatenation 解析出来如下: public class _13.CopyOfStringTest { public _13.CopyOfStringTest(); Code: 0: aload_0 1: invokespecial #8 // Method java/lang/Object."<init>":()V 4: return public static void main

透过源码学优化:String字符串性能优化的方案,你知道几种?

江枫思渺然 提交于 2020-02-26 00:41:01
推荐阅读: 阿里二面凉经:设计模式+缓存+Spring+虚拟机+MySQL+中间件+并发等难题,全部迎刃而解 阿里巴巴字节跳动那些大厂必问的HTTP该怎么学?我建议你看看这篇文章! 蚂蚁、字节、PDD社招面经Java岗(分布式+线程安全+MySQL+CAS) String字符串是系统里最常用的类型之一,在系统中占据了很大的内存,因此,高效地使用字符串,对系统的性能有较好的提升。 针对字符串的优化,我在工作与学习过程总结了以下三种方案作分享: 一.优化构建的超大字符串   验证环境:jdk1.8   反编译工具:jad 1.下载反编译工具jad,百度下载 2.验证 先执行一段例子1代码: public class test3 { public static void main(String[] args) { String str="ab"+"cd"+"ef"+"123"; } } 执行完成后,用反编译工具jad进行反编译:jad -o -a -s d.java test.class 反编译后的代码: // Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options:

RTS : The Do's and Don’ts of Java Strings

情到浓时终转凉″ 提交于 2020-02-25 19:29:54
阅读: The Do’s and Don’ts of Java Strings 问题1: 文章说, 大量 String + 连接比 通过 相应的StringBuilder 连接慢,要是在 Java7 之前我信,可以在 Java8 以及之后,编译器自动帮助我们把 + 优化成 StringBuilder 了。难道 Java8 的 String Concatenate 比 StringBuilder 慢?带着这样的疑问,决定好好的亲自试验一番。 结果1: Java8 的 String Concatenate 比 StringBuilder 慢? 问题2: Collator?Collator是什么鬼? 结果2: 初步认识Collator 问题3: Comparator、Comparable有问题区别? 结果3: 问题4: Iterator、Iterable有问题区别? 结果4: 来源: CSDN 作者: shengjk1 链接: https://blog.csdn.net/jsjsjs1789/article/details/104473579

动物的坐标数据

只愿长相守 提交于 2020-02-25 16:03:20
题目描述 动物学家研究动物群体行为的一种方式是将信号发射器安装到动物的身上,然后追踪动物在一定区域内的活动路线。科学家不但希望了解动物的活动路线,而且希望了解任意一个指定的时间上所有动物的分部。 假设现在有多个动物在指定的区域内活动。为了节省存储空间,科学家并没有选择存储每一个时刻的动物分布快照,而是存储当前时刻与上一个时刻的变化。假设每一个动物的位置由 x , y 两个坐标确定 (为了简单起见,我们假设所有坐标和坐标的变化均为整数),则我们规定一下的存储格式: 1、第一行是一个代表当前时刻的全局唯一的id(非空字符串,不包含空格,可假设它一定是全局唯一的) 2、第二行是当前的时刻。格式为yyyy/MM/dd HH:mm:ss (如2016/12/01 23:04:09) 3、从第三行开始是各动物的坐标变化,一个动物占用一行。这种变化有两种形式: (1)第一种形式:{动物的ID}{x坐标}{y坐标}。这种形式说明这种动物第一次出现在了这个区域里; (2)第二种形式:{动物的id}{上一个时刻的x坐标}{上一个时刻的y坐标}{x坐标变化量}{y坐标的变化量}。这种形式说明该动物在之前已经位于这个区域里了,其上一个时刻的x坐标和y坐标用于进行校验。而x,y坐标的变化为整数,正数表示增加,负数表示减少。 3、所有的数据全部存储在一个字符串 historyData 中。 例如:

3.8 StringBuilder与StringBuffer

我只是一个虾纸丫 提交于 2020-02-24 12:46:52
StringBuilder与StringBuffer 简介 更改可变字符序列 StringBuilder类中的常用方法 测试可变字符序列和不可变字符序列使用时的陷阱 简介 StringBuffer和StringBuilder非常类似,均代表可变的字符序列,而且使用方法也一样 。 StringBuilder:可变字符序列、效率高、线程不安全 StringBuffer:可变字符序列、效率低、线程安全 String:不可变字符序列 更改可变字符序列 代码 /** * 测试StringBuilder、 StringBuffer,都是可变字符序列 * 位于java.lang包中 * @author dxt * */ public class TestStringBuilder { public static void main ( String [ ] args ) { //StringBuilder线程不安全,效率高;StringBuffer线程安全,效率低 StringBuilder sb = new StringBuilder ( "abcdefg" ) ; //打印地址 System . out . println ( Integer . toHexString ( sb . hashCode ( ) ) ) ; System . out . println ( sb ) ; /

String, StringBuffer和StringBuilder的区别

六眼飞鱼酱① 提交于 2020-02-24 11:01:12
StringBuffer、StringBuilder和String一样,也用来代表字符串。String类是不可变类,任何对String的改变都 会引发新的String对象的生成;StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。既然可变和不可变都有了,为何还有一个StringBuilder呢?相信初期的你,在进行append时,一般都会选择StringBuffer吧! 先说一下集合的故事,HashTable是线程安全的,很多方法都是synchronized方法,而HashMap不是线程安全的,但其在单线程程序中的性能比HashTable要高。StringBuffer和StringBuilder类的区别也是如此,他们的原理和操作基本相同,区别在于StringBufferd支持并发操作,线性安全的,适 合多线程中使用。StringBuilder不支持并发操作,线性不安全的,不适合多线程中使用。新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。 原文链接:https://blog.csdn.net/mad1989/article/details/26389541 来源: https://www.cnblogs.com/yingying7/p/12355906.html