更新时间:2018-1-6 21:20:39

更多请查看在线文集:http://android.52fhy.com/java/index.html


String

字符串创建

String str1="ABC";//推荐使用
String str2 = new String("ABC");

第一种更省空间。对于字符串比较,如果直接使用==是判断地址是否相同,判断值是否相同需要使用String.equals()方法。

对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。

直接赋值可能创建一个对象或者不创建对象:如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC");如果已经存在,str1直接reference to 这个String池里的对象。

new操作至少创建一个对象,也可能两个。因为用到new关键字,会在堆里(heap)创建一个 str2 的String 对象,它的value 是 "ABC"。同时,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC")。

字符串内容是不可以被更改的。字符串相加更改的是堆内存地址的指向。

字符串的常用方法

  • length() 字符串长度
  • toCharArray() 将字符串变成字符数组
  • CharAt(int i) 字符串在偏移处的字符
  • getBytes(String decode) 使用指定的字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。参数为空则获得一个操作系统默认的编码格式的字节数组
  • indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引
  • trim() 返回字符串的副本,忽略前导空白和尾部空白
  • substring(int start, int end) 返回一个新字符串,它是此字符串的一个子字符串
  • toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写
  • toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写
  • startsWith(String prefix) 测试此字符串是否以指定的前缀开始
  • endsWith(String suffix) 测试此字符串是否以指定的后缀结束
  • replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的

StringBuffer

StringBuffer是String缓存区,本身也是操作字符串,但是与String不同,StringBuffer是可以被更改的,每次修改不会像String那样重新开辟空间。

通过StringBuffer处理完字符串后,我们需要使用new String(StringBuffer str)或者StringBuffer.toString()将StringBuffer转换为最终的字符串。

下面的例子演示StringBuffer是可变的:

public class StringDemo01 {

	public static void main(String[] args) {
StringBuffer s = new StringBuffer("hello");
append(s);
System.out.println(s.toString()); } public static void append(StringBuffer s) {
s.append(" world");
} }

运行输出:

hello world

如果改成String:

public class StringDemo01 {

	public static void main(String[] args) {
String s = new String("hello");
append(s);
System.out.println(s); } public static void append(String s) {
s+= " world";
}
}

运行输出:

hello

StringBuffer的常用方法:

  • append(String str) 拼接字符串,类似于字符串的操作符+号
  • insert(int offset, String str) 在偏移处插入内容
  • replace(int offset, int end, String str) 替换字符串
  • indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引

StringBuffer使用场景:

如果在一个循环中对字符串进行修改操作,那么请使用StringBuffer代替String。

StringBuilder

1、一个可变的字符串序列,和StringBuffer类似。该类被设计为StringBuffer的一个简易替换。当用在字符串缓存区被单个线程使用的时候,建议使用该类,速度比StringBuffer快。

2、但是如果涉及到线程安全方面,则建议使用StringBuffer。

由于StringBuilder与StringBuffer类似,这里不再详细举例说明。

Java笔记:字符串详解的更多相关文章

  1. java笔记--异常详解与处理

    一.异常概念 Throwable类是Java中所有错误或异常的超类. 1.只有当对象是此类(或其子类)的实例时,才能通过Java虚拟机或着Java throw语句抛出.     2.只有此类或其子类才 ...

  2. 云时代架构阅读笔记六——Java内存模型详解(二)

    承接上文:云时代架构阅读笔记五——Java内存模型详解(一) 原子性.可见性.有序性 Java内存模型围绕着并发过程中如何处理原子性.可见性和有序性这三个特征来建立的,来逐个看一下: 1.原子性(At ...

  3. Java String类详解

    Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...

  4. JAVA IO 类库详解

    JAVA IO类库详解 一.InputStream类 1.表示字节输入流的所有类的超类,是一个抽象类. 2.类的方法 方法 参数 功能详述 InputStream 构造方法 available 如果用 ...

  5. 淘宝JAVA中间件Diamond详解(2)-原理介绍

    淘宝JAVA中间件Diamond详解(二)---原理介绍 大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本次为大家带来的是diamond核心原理的介绍,主要包括server ...

  6. Java集合类的详解与应用

    Java集合类的详解与应用 集合简介: 1.定义:可以同时存储不同类型的数据 他的存储空间会随着数据的增大而增大 2.缺点:只能存储引用数据类型 3.优点:更加合理的利用空间,封装了更多的方法,用起来 ...

  7. Java 枚举(enum) 详解7种常见的用法

    Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...

  8. Java的String详解

    Java的String详解 博客分类: Java javaStringString详解常用方法  Java的String类在开发时经常都会被使用到,由此可见String的重要性.经过这次认真仔细的学习 ...

  9. java异常处理机制详解

    java异常处理机制详解 程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足.为了解决这些异常,我们需要知道异常发生的原因.对于一些常见的异常,我 ...

  10. Scrapy笔记04- Selector详解

    Scrapy笔记04- Selector详解 在你爬取网页的时候,最普遍的事情就是在页面源码中提取需要的数据,我们有几个库可以帮你完成这个任务: BeautifulSoup是python中一个非常流行 ...

随机推荐

  1. Nginx 反向代理 负载均衡 虚拟主机配置

    Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...

  2. Asteroids!-裸的BFS

    G - Asteroids! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Subm ...

  3. quick-cocos2d-x教程1:在window上创建第一个项目文件夹,并制作helloworld

    说明:此教程是针对cocos2dx 2.0系列的,3.0的版本号,如今还没有公布出来. 1)首先从github.com把这个项目下载到本地.然后装到d盘的根文件夹,并设置文件夹路径为d:\quick- ...

  4. org.hibernate.LazyInitializationException could not initialize proxy-no Session的解决

    方法一:在web.xml配置延迟关闭session的过滤器 <!-- 延迟关闭session OpenSessionInViewFilter 的顺序位于struts2过滤之上 否则延迟关闭ses ...

  5. JAVA入门--目录

    在此记录自己的JAVA入门笔记,备忘 JAVA入门[1]--安装JDK JAVA入门[2]-安装Maven JAVA入门[3]—Spring依赖注入 JAVA入门[4]-IntelliJ IDEA配置 ...

  6. CentOS 6.5 安装MySQL过程

    使用软件的版本 CentOS 6.5 mysql-5.5.22.tar.gz cmake-2.8.6.tar.gz 准备工作 解压安装mysql之前把关于mysql软件包卸载,以免程序冲突,端口冲突. ...

  7. Springboot 之 解决IDEA读取properties配置文件的中文乱码问题

    问题描述 当在.properties的配置文件中有中文时,读取出来的总是乱码.比如我的application.properties配置文件的内容如下: server.port=9090 test.ms ...

  8. maven pom.xml 中各个标签元素的作用

    <groupId> : 项目或者组织的唯一标识 <artifactId>项目的通用名称 <artifactId>项目的通用名称 <version> 项目 ...

  9. Jenkins+github+maven+git+linux

    Jenkins:持续集成的一个工具 github:远程存放代码 maven:利用maven创建项目,配置pom.xm依赖 git :本地仓库,可以提交代码到远程(我都是使用git 在git bush ...

  10. rsync 指定端口拷贝

    rsync -aP -e 'ssh -p 2288' ssh-audit.dat 172.18.18.31:/opt/freesvr/audit/sshgw-audit/sbin