Java String类和StringBuffer类的区别介绍
作者:china_zyb 发布时间:2022-06-12 11:42:13
关于java的字符串处理我们一般使用String类和StringBuffer类
那么String类和StringBuffer类的区别在什么地方呢?
1、String是不可变的、
StringBuffer
是可变的。在程序中如果定义String s = "this is a string".那么在以后的应用中不能对s进行任何修改只能进行诸如subString等操作,如果想进行改动只能重新new一个string而不是对原来的s进行改动.而对于StringBuffer却是可以改变的,在程序中定义StringBuffer s ="This is a",对于StringBuffer可以使用append和insert等函数,如s.append("string")结果就是s="This is a string".2、
String
类提供了一些方法,用来进行字符串的比较。这个类实现了Object父类的equals()方法,用来比较两种字符串的值是否相等。同时还增加了equalsIgnoreCase()方法可以忽略两个字符串大小写的区别。但是StringBuffer类并没有实现Objcet类的Equals方法,所以不能用这个方法来比较两个StringBuffer类的字符串是否相等。除了用equalse方法来比较两个字符串外,还可以用==来比较字符串。与equalse方法不同的是,==不是比较两个字符串的值是否相等,而是比较几个字符串的引用是否指向同一个实例。3、
StringBuffer
的效率并不一定比string高,如对于String s1 ="This "+“is”+"a"+"string"和StringBuffer s2="":s2.append(""This");s2.append("is");s2.append("a");s2.append("string").测试发现前者明显比后者效率高。原因是,在定义s1时,编译时即可使得s1="This is a string",而s2需要等到运行时才能确定。4、当然了,一般情况下,StringBuffer是要比String效率高些的
与包装类相似,String类是不可以改变的,从而不能修改字符串的值,所以必须创建一个新的字符串来存放,每次都重新开辟了一个内存空间。
如果字符串较少的话我们可以使用String 类,如果文件有几百成千个字节又会怎么样呢.
相反,我们提供另一个类Stingbuffer 来对字符串进行操作。
String类常用方法:
char charAt(int index)
; 返回index索引位置的字符
int length()
; 返回字符串的长度。
String substring(int beginindex,int endindex)
返回一个新的字符串,其值是beginindex索引位置到endindex索引位置。
String trim()
; 去除字符串两边的空格,并返回一个新的字符串。
String toLowerCase();
将字符串中的所以大写字母转换成小写字母,已有大写字母则不需要转换,并返回一个新的字符串。
String toUpperCase()
;String toLowerCase(); 将字符串中的所以小‘写字母转换成小写字母,已有小写字母则不需要转换,并返回一个新的字符串。
boolean equals(String str)
;本对象中的字符串与str对象字符串进行比较(区分大小写) 返回一个boolean值
String replace(char oldChar, char newChar)
;将旧的字符串(oldChar)换成新的字符串(newChar)
String类方法:
主要方法
append()
;向字符串末尾添加数据,而不像String类重新开辟空间存放新的内容
insert()
;根据方法的重载传递不同的参数,在指定的位置对字符串进行插入子字符串。
例:
String str = "how ";
str += "are ";
str +="you";
如果我们打印str的最终结果是how are you 是我们所期望的,内存里面的变化:
how
how are
how are you
String类使用重载加法运算符,在字符串表中创建新的条目,上面一共创建了三条。
当处理的字符串过多时,上面的做法就很耗费内存。
StringBuffer str = new StringBuffer("how");
//向str末尾添加字符串
str.append("are ");
str.append( "you");
将需要处理字符串交给StringBuffer
类处理 ,
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,
就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。而不是重新声明新的对象
这样的话就不会耗费内存!
来源:https://blog.51cto.com/u_2096101/5177863


猜你喜欢
- 代码如下一、创建EdgeLight.xaml代码如下。<ResourceDictionary xmlns="htt
- 本文实例讲述了Java设计模式之享元模式。分享给大家供大家参考,具体如下:解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享
- 记得上学的时候学习英语,每个英语老师说到英语翻译的时候都会说英语翻译要做到“信、达、雅”。如今做了一名程序员竟然体会我还是想用这三种境界来要
- 一. 项目需求我们做项目的时候,数据量比较大,单表千万级别的,需要分库分表,于是在网上搜索这方面的开源框架,最常见的就是mycat,shar
- Android开发,触控无处不在。对于一些 不咋看源码的同学来说,多少对这块都会有一些疑惑。View事件的分发机制,不仅在做业务需求中会碰到
- 本文实例为大家分享了C#实现航班预订的具体代码,供大家参考,具体内容如下连接数据库using System;using System.Col
- 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If
- 一、线程的优先级别线程优先级别的使用范例:package cn.galc.test;public class TestThread6 { p
- 这里使用的是dynamic-datasource-spring-boot-starter ,它是一个基于springboot的快速集成多数据
- 什么是数组数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,
- Android 集成FlutterFlutter 作为 Google 开源的新一代跨平台、高性能 UI 框架,旨在帮助开发者高效地构建出跨平
- 一、前言最近自己在学习Spring boot的过程中开发了一个组件 multithreadpool-spring-boot-starter,
- 引言近期,Google 发布了 Android 11的平台稳定版本。Android 11 将在确保用户隐私安全的前提下,更好地让用户畅享最新
- java中对集合对象list的几种循环访问的总结如下 1 经典的for循环 public static voi
- Intellij是进行scala开发的一个非常好用的工具,可以非常轻松查看scala源码,当然用它来开发Java也是很爽的,之前一直在用sc
- 相信大家对 String 和 StringBuffer 的区别也已经很了解了,但是估计还是会有很多同志对这两个类的工作原理有些不清楚的地方,
- 简介Quartz是一款功能强大的任务调度器,可以实现较为复杂的调度功能,如每月一号执行、每天凌晨执行、每周五执行等等,还支持分布式调度。本文
- 本篇给大家介绍Spring Boot 与 kotlin 使用Thymeleaf模板引擎渲染web视图。静态资源访问在我们开发Web应用的时候
- 演示1 - 代理创建器public class A17 { public static void main(Str
- 想要实现一个功能:同一个用户在两个不同的浏览器中登录,后面的踢掉之前的登录。本来的思路是在httpSession * 中进行判断。但是在使用