Java String类和StringBuffer类
1、String类
用于字符串操作,本质是字符数组char[ ]。
String对象的值是不可变的,即当你修改一个String对象的类容,JVM不会改变原来的对象,而是生成一个新String对象。
2、构造(new)字符串
String类的构造函数有5个,可以通过字节数组、字符数组构造对象,也可以通过String对象(即复制一个String)来创建新的String对象,还可以构造空的字符串。
3、不可变字符串
/*串池技术*/
String name="java course";
这种方式使用了串池(String Pool)技术,串池是一段字符串的内存缓冲区。
如上创建字符串对象时,JVM会检查name在串池中是否存在内容相同的字符串对象,若不存在,则在池中创建一个字符串name,否则会把name指向已经存在的对象。(这样貌似很高效)
4、字符串长度——String.length()方法,返回字符串的个数。(一个汉字也是一个字符)
5、两个字符串比较——依次比较字符编码
/*compareTo(String s)*/
/*大于s,返回大于0的值;小于,返回小于0的值;相等,返回0。*/
String s1="abc";
String s2="abd";
int result=s1.compareTo(s2); //-1 /*compareToIgnoreCase()忽略大小写*/
String s3="aBc";
String s4="ABC";
result=s3.compareToIgnoreCase(s4); //
6、equals(),判断两个String对象内容是否相同,返回true或false
equals()在String中被重写,而“==”比较的是两个对象在内存中的地址是否一样。
忽略大小写:equalsIgnoreCase()
7、子串查找
indexOf(),返回子串第一次出现的位置;
lastIndexOf(),从字符串末尾向前找,返回第一次出现的位置;
8、截取子串
substring(int start,int end),不包含索引值为end的字符
9、分割字符串
public String[] split(String regex); /*limit是分割后返回的字符串数组的元素个数*/
public String[] split(String regex,int limit);
“|”、“*”、“+”作为分隔符时,要加上转义字符“\\”;“\”就要写成“\\\\”;
多个分隔符用“|”连接,也可以在正则表达式中添加空格。
10、int、String转换
静态方法:valueOf(int n);
String对象转换为数字,使用包装类Integer的静态方法int parseInt(String s),只不过必须传入数字字符串。
11、包装类
Java为每个基本数据类型定义了包装类,共8种,位于java.lang下。它们的使用方式一致,实现基本数据类型与包装类的相互转换。
为什么需要包装类?因为包装类型是一个类,有属性有方法,所以就比基本数据类型功能强大。
自动装箱:Autoboxing,将基本数据类型自动转换为包装类。例如可以将整型变量直接复制给Integer类型的变量
自动拆箱:Unboxing,将包装类自动转换为基本数据类型。例如:
/*加法操作中,Integer先自动转换为int,完成运算,然后再次转换为Integer*/
Integer b;
Integer y=b+2;
12、增强的switch语句
Java 7后可以在switch语句的测试条件表达式中使用String对象,其实是调用了equals()方法。
13、StringBuffer
也用来代表字符串,StringBuffer在进行字符串处理时,不生成新的对象,在内存的使用上优于String类。
所以在经常需要对一个字符串进行修改操作如插入、删除,使用StringBuffer更加高效。
两者的很多方法相同,只是StringBuffer改变对象自身。
StringBuffer的内部使用字符数组,当放入StringBuffer对象的字符长度超过初始化时设置的字符数组长度时,需要重新开辟长度增加两倍的字符数组,并把原来的字符数组内容复制到新字符数组中。
所以设置合适的长度,对StringBuffer的性能影响很大。
StringBuffer的主要方法偏重对字符串进行修改操作,这也是引入StringBuffer的原因!
14、String和StringBuffer相互转换:
String s="abc";
StringBuffer sb1=new StringBuffer("123"); StringBuffer sb2=new StringBuffer(s);
String s1=sb1.toString();
Java String类和StringBuffer类的更多相关文章
- Java 常用类String类、StringBuffer类
常用类 String类.StringBuffer类 String代表不可变的字符序列 "xxxxxxx"为该类的对象 举例(1) public class Test { publi ...
- 一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对照
本文主要介绍String类.StringBuffer类.StringBuilder类的差别 : 一.概述 (一)String 字符串常量.可是它具有不可变性,就是一旦创建,对它进行的不论什么改动操作 ...
- String类和StringBuffer类的区别
首先,String和StringBuffer主要有2个区别: (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringB ...
- String类,StringBuffer类转字符数组
String不可变类型和StringBuffer可变类型 String类和StringBuffer类都是字符串表示类,区别在于String对象引用变量是不可变的,而StringBuffer类对象引用变 ...
- 【学习笔记】String进阶:StringBuffer类(线程安全)和StringBuilder类
一.除了使用String类存储字符串之外,还可以使用StringBuffer类存储字符串.而且它是比String类更高效的存储字符串的一种引用数据类型. 优点: 对字符串进行连接操作时,使用Strin ...
- String类与StringBuffer类
String类与StringBuffer类 一.String类和StringBuffer类的区别 String类是不可变类,新建的对象为不可变对象(String类的内容和长度是固定的),一旦被创建 ...
- (1)StringBuilder类和StringBuffer类 (2)日期相关的类 (3)集合框架 (4)List集合
1.StringBuilder类和StringBuffer类(查手册会用即可)1.1 基本概念 由于String类描述的字符串内容无法更改,若程序中出现大量类似的字符串时需要申请独立的内存空间单独保存 ...
- java中String类、StringBuilder类和StringBuffer类详解
本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html 版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolp ...
- Java String类和StringBuffer类的区别
1.String与StringBuffer的区别简单地说,就是一个变量和常量的关系.StringBuffer对象的内容可以修改:而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象.St ...
- Java 基础 常用API (Object类,String类,StringBuffer类)
Java API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就是JDK中提供给我们使用的类,这些类将底 ...
随机推荐
- FileZilla 客户端连接vsftp无法访问 Received unexpected end-of-file from SFTP server 解决之路
首先在win通过ftp连接centos过程中,出现了2个问题,现在对此记录一下,方便后人遇到问题进行查阅 1.由于加密协议不同,需要在ftp客户端设置一下,支持ssh模式,具体自行百度: 2.在设置完 ...
- VMware配置NAT方式下的静态ip
一.VMware上NAT模式工作原理 原理图如下: 说明: 1.虚拟主机与本地主机通信时,直接通过虚拟交换机访问(不管是虚拟主机的ip是静态ip还是动态分配的ip) 2.虚拟主机与外网通信时,虚拟主机 ...
- QT Embedded二三事之QObject的元对象
一.元对象 元对象被称做是meta object.在运行时刻(runtime),能够提供对象的运行时信息. 在C++语言发展的早期,C++语言本身没有定义对象的运行时信息,如输出类的名 ...
- 性能测试 | Linux线程数、进程查询
I. 最大值查询 1. 最大进程数查询 1 cat /proc/sys/kernel/pid_max 个人阿里云机器(单核2g)上输出如下 1 32768 2. 最大线程数查询 1 cat /proc ...
- Android跨进程通信广播(Broadcast)
广播是一种被动跨进程通讯的方式.当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据.这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通,在应用程序中发送广播比较简单.只 ...
- HttpClient提交数据
用代码模拟浏览器的行为 * 轻量级的开源的框架 * Android在6.0 23 以后移除了httpclient ,所以开发中用的少了 * 编写步骤: 1. 打开浏览器 2. 输入网址 3. 敲回车 ...
- [z]curl使用指南
https://www.jianshu.com/p/fc0eb6c60816 curl -X POST "http://aa/bb/cc" -H "accept:*/* ...
- nginx配置, 启动命令, 反向代理配置
2014年1月3日 13:52:07 喜欢这样的风格,干货 http://huoding.com/2013/10/23/290 -----------------下边是我自己的经验(windows)- ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务
笔记 5.微服务调用方式之feign 实战 订单调用商品服务 简介:改造电商项目 订单服务 调用商品服务获取商品信息 Feign: 伪RPC客户端(本质还是用http) ...
- Spring-Kafka —— 消费如何达到最高的吞吐量
首先简单的介绍一下消费者对topic的订阅.客户端的消费者订阅了topic后,如果是单个消费者,那么消费者会顺序消费这些topic分区中的数据,如果是创建了消费组有多个消费者,那么kafak的服务端将 ...