Question 20171115 String&&StringBuffer&&StringBuilder的区别与联系?
Question 20171114 String&&StringBuffer&&StringBuilder的区别和联系
创建成功的String对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如果重复地对字符串进行修改,将极大的增加系统开销。而JavaSE 5.0新增了可变的字符序列StringBuilder类,大大提高了频繁增加字符串的效率。也许我们会问那JavaSE5.0之前呢?实际在JavaSE5.0之前有StringBuffer,但是StringBuffer是线程安全的,这就会造成效率的底下,所以JavaSE5.0新增了StringBuilder来弥补StringBuffer的不足。
String :不可改变
StringBuffer:可改变 线程安全
StringBuilder:可改变 线程不安全
验证连接字符串,String之+和StringBuffer的append谁的效率高
package cn.sb.capacity;
public class StringAndStringBuffer {
public static void main(String[] args) {
fun1();
// fun2();
// fun3();
// fun4();
}
/**
* new String
*/
public static void fun1(){
String str1 = new String("");
long start = System.currentTimeMillis();
for (int i = 0; i < 20000; i++) {
str1 += i;
}
long end = System.currentTimeMillis();
System.out.println("new字符串str1,添加字符串用时:"+(end-start));
}
/**
* 声明字符串
*/
public static void fun2(){
String str2 = "";
long start = System.currentTimeMillis();
for (int i = 0; i < 20000; i++) {
str2 += i;
}
long end = System.currentTimeMillis();
System.out.println("声明字符串str2,添加字符串用时:"+(end-start));
}
/**
* 安全字符串缓冲
*/
public static void fun3(){
StringBuffer sb1 = new StringBuffer("");
long start = System.currentTimeMillis();
for (int i = 0; i < 200000; i++) {
sb1.append(i);
}
long end = System.currentTimeMillis();
System.out.println("安全sb1添加字符串用时:"+(end-start));
}
/**
* 高效字符串缓冲
*/
public static void fun4(){
StringBuilder sb2 = new StringBuilder("");
long start = System.currentTimeMillis();
for (int i = 0; i < 200000; i++) {
sb2.append(i);
}
long end = System.currentTimeMillis();
System.out.println("高效sb2添加字符串用时:"+(end-start));
}
}



欢迎各位大神提问题及补充不足和警醒错误!
Question 20171115 String&&StringBuffer&&StringBuilder的区别与联系?的更多相关文章
- String,StringBuffer,StringBuilder的区别
public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...
- [置顶] String StringBuffer StringBuilder的区别剖析
这是一道很常见的面试题目,至少我遇到过String/StringBuffer/StringBuilder的区别:String是不可变的对象(final)类型,每一次对String对象的更改均是生成一个 ...
- String,StringBuffer,StringBuilder的区别及其源码分析
String,StringBuffer,StringBuilder的区别这个问题几乎是面试必问的题,这里做了一些总结: 1.先来分析一下这三个类之间的关系 乍一看它们都是用于处理字符串的java类,而 ...
- java中 String StringBuffer StringBuilder的区别
* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
- 深入理解String, StringBuffer, StringBuilder的区别(基于JDK1.8)
String.StringBuffer.StringBuilder都是JAVA中常用的字符串操作类,对于他们的区别大家也都能耳熟能详,但底层到底是怎样实现的呢?今天就再深入分析下这三种字符串操作的区别 ...
- Android/Java 中的 String, StringBuffer, StringBuilder的区别和使用
Android 中的 String, StringBuffer 和 StringBuilder 是移动手机开发中经常使用到的字符串类.做为基础知识是必须要理解的,这里做一些总结. A.区别 可以从以下 ...
- 在JAVA中,String,Stringbuffer,StringBuilder 的区别
首先是,String,StringBuffer的区别 两者的主要却别有两方面,第一是线程安全方面,第二是效率方面 线程安全方面: String 不是线程安全的,这意味着在不同线程共享一个String ...
- String,StringBuffer,StringBuilder三者区别
String:每次改变,String都会重新构造,内存指针都会改变 StringBuffer:主要用在全局变量中 StringBuilder:在线程内完成字符拼接,因为线程是不安全的,所以完成后可以丢 ...
- 从源码看String,StringBuffer,StringBuilder的区别
前言 看了一篇文章,大概是讲面试中的java基础的,有如题这么个面试题.我又翻了一些文章看了下,然后去看源码.看一下源码大概能更加了解一些. String String类是final的,表示不可被继承 ...
随机推荐
- File类--随笔
package io; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; im ...
- ie8点击焦点有虚线框兼容问题
a标签的: 方法一:在IE下是使用html属性:hideFoucs,在HTML标签中加上hidefocus=”true” 属性即可,但这个属性是IE私有的,Firefox是不认的. <a hre ...
- 深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP
前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle ). 开闭原则的描述是: Software ...
- 深入理解JavaScript系列(2):揭秘命名函数表达式
前言 网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点. 简单的说,命名函数表 ...
- union、except和intersect查询
1. union联合查询 (合并) select r.room_id from room r union select rp.num from room_type rp 要求表1和表2的查询结果结构 ...
- 融云会话界面导航上移-使用IQKeyboardManager
关于IQKeyBoardManager挤出导航栏的解决方案 方法一: 写在前面 虽然修改后能解决导航栏被挤出去的问题,但是就目前来看是有副作用的,写这篇文章就是想大家来一起讨论,毕竟键盘处理还是比较头 ...
- Web安全入门笔记-XSS
windows 10 360浏览器 0x00.概述 1.什么是 XSS Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击.攻击者通过在目标网站上注入恶意脚本,使 ...
- 如何设置树莓派的VNC开机时启动
转载:http://www.linuxidc.com/Linux/2016-12/138793.htm 下面正式开始配置 首先 sudo nano /etc/init.d/vncserver 然后 复 ...
- 爬楼梯C++
class Solution {public: /** * @param n: An integer * @return: An integer */ int climbStairs(int n) { ...
- JavaScript中弧度和角度的转换
弧度 = 角度 * Math.PI / 180 角度 = 弧度 * 180 / Math.PI 在JavaScript Math 对象中: sin() 方法可返回一个数字的正弦. tan() 方法可返 ...