Java中stringbutter_java中string与ButterString的区别
String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结。
在java中有3个类来负责字符的操作。
1.Character 是进行单个字符操作的,
2.String 对一串字符进行操作。不可变类。
3.StringBuffer 也是对一串字符进行操作,但是可变类。
String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
note:不能通过付值符号对他进行付值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
中付值的时候可以通过它的append方法.
sb.append("hello");
字符串连接操作中StringBuffer的效率要比String高:
String str = new String("welcome to ");
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.
并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.
这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.
看看以下代码:
将26个英文字母重复加了5000次,
String tempstr ="abcdefghijklmnopqrstuvwxyz";
inttimes =5000;
longlstart1 = System.currentTimeMillis();
String str ="";
for(inti =0; i
str += tempstr;
}
longlend1 = System.currentTimeMillis();
longtime = (lend1 - lstart1);
System.out.println(time);
可惜我的计算机不是超级计算机,得到的结果每次不一定一样一般为 46687左右。
也就是46秒。
我们再看看以下代码
String tempstr ="abcdefghijklmnopqrstuvwxyz";
inttimes =5000;
longlstart2 = System.currentTimeMillis();
StringBuffer sb =newStringBuffer();
for(inti =0; i
sb.append(tempstr);
}
longlend2 = System.currentTimeMillis();
longtime2 = (lend2 - lstart2);
System.out.println(time2);
得到的结果为 16 有时还是 0
所以结论很明显,StringBuffer 的速度几乎是String 上万倍。当然这个数据不是很准确。因为循环的次数在100000次的时候,差异更大。不信你试试。
根据上面所说:
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
再将StringBuffer toSting();
所以str += "here";可以等同于
StringBuffer sb = new StringBuffer(str);
sb.append("here");
str = sb.toString();
所以上面直接利用"+"来连接String的代码可以基本等同于以下代码
String tempstr ="abcdefghijklmnopqrstuvwxyz";
inttimes =5000;
longlstart2 = System.currentTimeMillis();
String str ="";
for(inti =0; i
StringBuffer sb =newStringBuffer(str);
sb.append(tempstr);
str = sb.toString();
}
longlend2 = System.currentTimeMillis();
longtime2 = (lend2 - lstart2);
System.out.println(time2);
平均执行时间为46922左右,也就是46秒。
总结: 如果在程序中需要对字符串进行频繁的修改连接操作的话.使用StringBuffer性能会更高
Java中stringbutter_java中string与ButterString的区别相关推荐
- java string 连续字符_Java中字符串中连续相同字符去重方法
导读 正文 最近参加了一个面试,问到了如何在一个字符串中连续相同字符去重,想了想用正则表达式应该可以轻松实现.可是由于长时间没有编码了,而且由于原先的工作用到的比较少.具体的自己就不会写正则表达式用到 ...
- JAVA中String与StringBuffer的区别
String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...
- Java 中的字符串(String)与C# 中字符串(string)的异同
1. C# 中比较两个字符串字面量是否相等,可以使用 "=="比较运算符,是因为string 类型重写(override)了"==" 和 "!=&qu ...
- java中如何将string 转化成long(亲测)
转自:https://www.cnblogs.com/feifeicui/p/8390604.html 1.java中如何将string 转化成long long l = Long.parseLong ...
- JAVA中int、String的类型转换(亲测)
int -> String int i=12345; String s=""; 第一种方法:s=i+""; 第二种方法:s=String.valueOf( ...
- JAVA中int、String的类型转换
int -> String int i=12345; String s=""; 第一种方法:s=i+""; 第二种方法:s=String.valueOf( ...
- Java黑皮书课后题第10章:**10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2)
**10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2) 题目 简短的吐槽 代码:这里将类名改用Test23_MyStrin ...
- java convert函数_自己实现 java中 Convert.toDouble(String str)处理函数 | 学步园
今天在superWaba上看到Convert.toDouble(String str),由于底层问题比较大的数就出错,现在自己写了一个 程序中info()是我加的打印,可以去掉 java中 Conve ...
- java 使用string_java中string怎么使用
展开全部 以下是关于string的七种用法,注意哦,记得要时常去查看java的API文档,那个里面也有很详细32313133353236313431303231363533e78988e69d8331 ...
最新文章
- 报错解决:ERROR: While executing gem ... (Gem::CommandLineError)
- 对约束条件优化问题的理解
- 【SQL Server】系统学习之三:逻辑查询处理阶段-六段式
- python爬虫赚钱的经历-聊一聊,这些年我用Python爬虫挣钱的那些事
- Spring AOP中pointcut expression表达式解析
- Python机器学习及分析工具:Scipy篇
- Cewolf使用小结
- 牛客多校4 - Harder Gcd Problem(构造+贪心)
- 序列化框架MJExtension详解 + iOS ORM框架
- 剑三游戏总是显示服务器繁忙,剑网3怀旧服:服务器终究低估了老玩家的热情...
- 运行SQL文件时报Lost connection to MySQL server during query
- 5个Linux 服务器发行版你值得拥有
- CS安装卸载测试总结
- 数据结构算法设计题汇总
- UG编程逆向工程如何做,一起来学习
- 2022-2028年中国SPA水疗行业市场深度分析及投资前景展望报告
- 常用复原reast.css
- N的阶乘递归与非递归
- el-checkbox点击没反应
- 如何让win XP实现自动登陆
热门文章
- 34 年了,“杀”不死的 Perl!
- 火山引擎进军云市场,计划未来三年服务十万客户
- 震惊!微软小冰公众号被封?示好国内,苹果拟推出特色版iPhone;谷歌更新Google Play支持名单:华为荣耀多款在列……...
- python dll注入 网络_python – 检测反射型DLL注入
- python分片上传_python上传文件到oss
- java浮点数数转二进制的数吗_深入理解计算机系统(2.7)-二进制小数和IEEE浮点标准 - Java 技术驿站-Java 技术驿站...
- Cannot read property ‘forceUpdate‘ of undefined
- yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本
- Springboot/Cloud集成Sentinel进阶实战
- java.lang.ClassNotFoundException: org.apache.log4j.Logger