Java总结:字符串详解
更新时间: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总结:字符串详解的更多相关文章
- Java String类详解
Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...
- JAVA IO 类库详解
JAVA IO类库详解 一.InputStream类 1.表示字节输入流的所有类的超类,是一个抽象类. 2.类的方法 方法 参数 功能详述 InputStream 构造方法 available 如果用 ...
- 淘宝JAVA中间件Diamond详解(2)-原理介绍
淘宝JAVA中间件Diamond详解(二)---原理介绍 大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本次为大家带来的是diamond核心原理的介绍,主要包括server ...
- Java集合类的详解与应用
Java集合类的详解与应用 集合简介: 1.定义:可以同时存储不同类型的数据 他的存储空间会随着数据的增大而增大 2.缺点:只能存储引用数据类型 3.优点:更加合理的利用空间,封装了更多的方法,用起来 ...
- Java 枚举(enum) 详解7种常见的用法
Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...
- Java的String详解
Java的String详解 博客分类: Java javaStringString详解常用方法 Java的String类在开发时经常都会被使用到,由此可见String的重要性.经过这次认真仔细的学习 ...
- java异常处理机制详解
java异常处理机制详解 程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足.为了解决这些异常,我们需要知道异常发生的原因.对于一些常见的异常,我 ...
- Java注解(Annotation)详解
转: Java注解(Annotation)详解 幻海流心 2018.05.23 15:20 字数 1775 阅读 380评论 0喜欢 1 Java注解(Annotation)详解 1.Annotati ...
- Java内存结构详解
Java内存结构详解 Java把内存分成:栈内存,堆内存,方法区,本地方法区和寄存器等. 下面分别介绍栈内存,堆内存,方法区各自一些特性: 1.栈内存 (1)一些基本类型的变量和对象的引用变量都是在函 ...
- Java 序列化Serializable详解
Java 序列化Serializable详解(附详细例子) Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连 ...
随机推荐
- Linux常用备份恢复工具
在 Linux 中可以通过各种各样的方法来执行备份.所涉及的技术从非常简单的脚本驱动的方法,到精心设计的商业化软件.备份可以保存到远程网络设备.磁带驱动器和其他可移动媒体上.备份可以是基于文件的或基于 ...
- Java案例:超市库存管理系统
案例介绍: 模拟真实的库存管理逻辑,完成超市管理系统的日常功能实现,见下图 案例需求分析: 根据案例介绍,我们进行分析,首先需要一个功能菜单,然后输入功能序号后,调用序号对应的功能方法,实现想要的操作 ...
- vue.js入门学习
可以用淘宝npm镜像 然后安装 然后初始化项目: Watch就是一个监听 v-if是如果为false就根本不在页面存在这个元素 v-show是通过display:none来控制这个元素的显示和隐藏 r ...
- 《SQL必知必会》笔记
SQL必知必会(第4版) 作者:[美]Ben Forta 本书介绍了sql在不同数据库工具(Oracle.SQLite.SQL server.MySQL.MariaDB.PostgreSQL...)是 ...
- Windows 95 输入法编辑器
Windows 95 输入法编辑器 翻译:戴石麟译自微软的MSDN DDK 关于Windows 95的多语言IME(输入法编辑器) 在Windows 95中,IME以动态连接库(DLL)的形式提供,与 ...
- 使用dbms_profiler包测试存储过程性能
原文地址 http://hi.baidu.com/edeed/blog/item/345401e9a8851d38b80e2db4.html dbms_profiler用来测试PL/SQL代码非常 ...
- ASP.NET MVC高亮显示当前页面菜单
1.创建MvcHtmlExtension扩展类 public static class MvcHtmlExtension { public static MvcHtmlString MenuLink( ...
- 自定义WPF窗体形状
介绍 你好WPF爱好者. 随着WPF等统一API语言的发明,丰富用户界面变得非常容易. 创建丰富的用户界面只是一个想法. 您需要拥有的是创造性思维和最新技术融合. WPF和Expression Ble ...
- WPF点滴(3) 行为-Behavior
为了定制个性化的用户界面,我们通常会借助于WPF强大的样式(style),修改控件属性,重写控件模板(template),样式帮助我们构建一致的个性化控件.通过样式可以调整界面的显示效果,这只是界面构 ...
- ASP.NET MVC WebAPI实现文件批量上传
工作中学习,学习中记录~~~~~~ 最下面附上demo 任务需求:需要做一个apI接口让C#的程序调用实现批量文件的上传. 难度: 没有做过通过API上传文件的...之前做过网站前后台上传. 首先当然 ...