stringbuilder

String, StringBuffer, StringBuilder 的区别

烈酒焚心 提交于 2020-02-23 03:00:44
1.String 是不可变类,任何对它的改变都会生成一个新的对象,而StringBuffer是可变的。 2.StringBuffer 是线程安全的, StringBuilder 是线程不安全的。多线程下要使用StringBuffer,但是单线程下StringBuilder的性能更好。就类似HashTable与HashMap的区别。 StringBuffer常用方法 (由于StringBuffer和StringBuilder在使用上几乎一样,所以只写一个,以下部分内容网络各处收集,不再标注出处) StringBuffer s = new StringBuffer(); 这样初始化出的StringBuffer对象是一个空的对象, StringBuffer sb1=new StringBuffer(512); 分配了长度512字节的字符缓冲区。 StringBuffer sb2=new StringBuffer(“how are you?”) 创建带有内容的StringBuffer对象,在字符缓冲区中存放字符串“how are you?” a、append方法 public StringBuffer append(boolean b) 该方法的作用是追加内容到当前StringBuffer对象的末尾,类似于字符串的连接,调用该方法以后,StringBuffer对象的内容也发生改 变,例如:

彻底研究StringBuilder

主宰稳场 提交于 2020-02-23 03:00:12
上一篇《 彻底研究String 》介绍了String类型的一些性质。.NET对String的优化,能高效安全的完成一些操作,但正是这些优化导致了在进行某些操作时会占用大量的资源,如拼接字符串、修改字符串等等,高效地完成这些操作的替代类型是StringBuilder。(每次都想"彻底研究",但每次都发现研究的不彻底,写出来的更不彻底,以至于不敢用"彻底研究"等字眼了,但为与上一篇对应,暂且再亵渎一次"彻底研究"!) 上篇勘误 上一篇《 彻底研究String 》中"在与不安全代码互操作是会不会破坏字符串的不变性?"这个问题的答案的分析验证是错误的,在这里向大家道歉!已经更新。 public sealed class StringBuilder : ISerializable 位于:System.Text命名空间中。 StringBuilder仅实现ISerializable接口,直接派生自Object,相对于String类型其功能不太完善,如ToUpper、SubString、foreach遍历每个字符等等,后面介绍如何扩展其功能。它是密封类型,不能通过派生它的子类来改变其行为。 StringBuilder能够动态高效的构建字符串、修改字符串,不能保证所有实例成员都是线程安全的,尽管在类型定义中加入了很多线程安全的控制,如果要确保其线程安全,须手工实现线程同步机制。

StringBuilder

不羁的心 提交于 2020-02-22 12:13:56
StringBuilder定义和作用 StringBuilder的作用:节省字符串拼接所制造的内存和占用的时间 每一次字符串拼接堆区中的常量区都会开辟一块新的地址和内存 StringBuilder是一个可变的字符串类,我们可以把它看作是一个容器,这里的可变指的是StringBuiler对象中的内容是可变的,它在进行拼接的时候是不会创建一个新的对象的。而String中的内容是不可变的。 StringBuilder的构造方法 public StringBuilder() 无参构造方法,可创建空白字符串对象 public StringBuilder(String str) 带参构造方法,根据字符串内容,创建可变字符串对象 StringBuilder stb = new StringBuilder() 这个是创建对象的格式(创建对象的统一格式) StringBuilder的添加和反转方法 通过append方法进行添加 StringBuilder stb = new StringBuilder(); sbb.append("sapere"); sbb.append("Aude"); //输出这个字符串的结果为 spaere Aude //如果采用链式编程: sbb.append("sapere"). sbb.append.("Aude") //输出结果一样 /

Java学习笔记二

穿精又带淫゛_ 提交于 2020-02-20 03:21:48
一、String 类的常用方法 Ⅰ: String 类的常用方法: 方法的使用: 运行结果: 友情提示: 字符串 str 中字符的索引从0开始,范围为 0 到 str.length() -1 使用 indexOf 进行字符或字符串查找时,如果匹配返回位置索引;如果没有匹配结果,返回 -1 使用 substring(beginIndex , endIndex) 进行字符串截取时,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符。 二、String 类常用方法 Ⅱ 运行结果: 区别: ==: 判断两个字符串在内存中首地址是否相同,即判断是否是同一个字符串对象 equals(): 比较存储在两个字符串对象中的内容是否一致 三、StringBuilder 类 1.简单认识 在Java中,除了可以使用 String 类来存储字符串,还可以使用 StringBuilder 类或 StringBuffer 类存储字符串,那么它们之间有什么区别呢? String 类具有是不可变性。如: 运行结果: 从运行结果中我们可以看到,程序运行时会额外创建一个对象,保存 “helloworld”。当频繁操作字符串时,就会额外产生很多临时变量。使用 StringBuilder 或 StringBuffer 就可以避免这个问题。至于 StringBuilder

JAVA学习笔记(六)

╄→尐↘猪︶ㄣ 提交于 2020-02-19 22:31:37
一、Object类 java.lang.Object 类 Object 是类层次结构的根(父)类。 每个类(Person,Student…)都使用 Object 作为超(父)类。所有对象(包括数组)都实现这个类的方法。 如果一个类没有特别指定父亲,那么默认则继承自Object类: public class Person /* extends Object*/ { //... } 1.toString方法 方法摘要:public String toString():返回该对象的字符串表示。 toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。 public class ToString { public static void main ( String [ ] args ) { Person p = new Person ( "张三" , 18 ) ; //Person类默认继承了Object类,所以可以使用Object类中的toString方法 String s = p . toString ( ) ; //直接打印对象的名字,其实就是调用对象的toString p = p.toString(); System . out . println ( s ) ; //Object.Person@4554617c | /

Java —— 基础

孤人 提交于 2020-02-18 14:46:21
题目来源:微信公众号 — java经验总结 文章目录 1. JDK 和 JRE 有什么区别? 2. `==` 和 `equals` 的区别是什么? 3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 4. final 在 java 中有什么作用? 5. java 中的 Math.round(-1.5) 等于多少? 6. String 属于基础的数据类型吗? 7. java 中操作字符串都有哪些类?它们之间有什么区别? 8. String str="i"与 String str=new String("i")一样吗? 9. 如何将字符串反转? 10. String 类的常用方法都有那些? 11. 抽象类必须要有抽象方法吗? 12. 普通类和抽象类有哪些区别? 13. 抽象类能使用 final 修饰吗? 14. 接口和抽象类有什么区别? 15. java 中 IO 流分为几种? 16. Files的常用方法都有哪些? 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包, java 开发环境 + 运行环境。 JRE:Java Runtime Environment 的简称,java 运行环境 。 具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器

String不变性以及String/StringBuffer/StringBuilder的区别

蹲街弑〆低调 提交于 2020-02-17 06:36:39
String/StringBuffer/StringBuilder的区别 String、StringBuffer、StringBuilder都是final 类, 都不允许被继承 String 长度是不可变的, StringBuffer、StringBuilder 长度是可变的 StringBuffer 是线程安全的, StringBuilder 不是线程安全的,但它们两个中的所有方法都是相同的,StringBuffer在StringBuilder的方法之上添加了synchronized修饰,保证线程安全 StringBuilder比StringBuffer拥有更好的性能。因为它支持StringBuffer的所有操作,但是因为它不执行同步,不会有线程安全带来额外的系统消耗,所以速度更快 如果一个String类型的字符串,在编译时就可以确定是一个字符串常量,则编译完成之后,字符串会自动拼接成一个常量。此时String的速度比StringBuffer和StringBuilder的性能好的多 可变性   String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],因此String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在

Java 208 道面试题:第一模块答案

╄→尐↘猪︶ㄣ 提交于 2020-02-17 01:55:50
目前市面上的面试题存在两大问题:第一,题目太旧好久没有更新了,还都停留在 2010 年之前的状态;第二,近几年 JDK 更新和发布都很快,Java 的用法也变了不少,加上 Java 技术栈也加入了很多新的框架,比如 Spring Boot、Spring Cloud 等,但类似的面试题却极少。 相比与这些问题,我的这 208 道面试题具备以下优点: 披沙拣金提炼出每个 Java 模块中最经典的面试题; 答案准确,每个题目都是我仔细校对过的; 接近最真实的企业面试,题目实用有效果; 难懂的题目,我加入了代码解析和原理分析。 综合以上特点,可见对于 《Java 最常见的 200+ 面试题》 这篇文章,我花了很大的功夫,目的只有一个提供一份目前市面上最好、最全的 Java 面试题集合。 本篇是这 208 道题中,第一部分“Java 基础”模块的题和答案。 1.JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。 具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说

Java 学习 #5

主宰稳场 提交于 2020-02-16 23:38:30
1、抽象类 抽象类的概念: 包括抽象方法的类,用abstract修饰 抽象方法的概念: 只有方法声明,没有方法体的方法,用abstract修饰 抽象方法的由来: 当需要定义一个方法,却不明确方法的具体实现时,可以将方法定义为abstract,具体实现延迟到子类 package cn . itcast . demo7 ; public class Test { public static void main ( String [ ] args ) { //测试狗类 Dog d = new Dog ( ) ; d . eat ( ) ; //测试老鼠类 Mouse m = new Mouse ( ) ; m . eat ( ) ; System . out . println ( "------------" ) ; //通过多态测试 Animal an = new Dog ( ) ; an . eat ( ) ; Animal a = new Mouse ( ) ; a . eat ( ) ; } } package cn . itcast . demo7 ; //父类(抽象类) public abstract class Animal { //抽象方法 (特点:要求子类必须重写) public abstract void eat ( ) ; } package cn .

String类详解

半城伤御伤魂 提交于 2020-02-15 04:12:07
一、基本内容: String类:即字符串类,其主要构造方法为:  String(String Original),把字符串封装成字符串对象;  举例:String s1 = new String(“hello”);  String(char[] value),把字符数组的数据封装成字符串对象;  举例:char[] chs = {‘h’,‘e’,‘l’,‘l’,‘o’};        String s2 = new String(chs);  String(char[] value,int index, int count),从索引index开始把count个字符数组值封装成字符串对象。  举例:char[] chs = {‘h’,‘e’,‘l’,‘l’,‘o’};      String s3 = new String(chs,1,3);  最为简单的一种方法是直接构造法:  举例:String s4 = “hello”; new创建与直接赋值:针对创建的String类的对象,通过构造方法创建的String对象,存放在java虚拟机的堆内存,堆内存里存放的是字符串常量的地址,字符串常量存放在方法区的常量池中;通过直接赋值所创建的对象直接是方法区中的常量池中的字符串常量。而语句(s1==s2)是比较s1和s2中存放的地址,显然不相同,但是s2和s3的地址相同,则会得到true结果