深入理解Java字符串:特点、构造与比较
Java学习笔记之字符串主要探讨了Java中字符串处理的基础概念和关键特性。在Java中,String类是核心且至关重要的,它代表了字符串数据类型,其特点包括: 1. **final String 类**:String 类被final修饰,意味着它是一个不可变类,一旦创建,其内容就不能修改。这是为了保证线程安全性和效率,因为每次对字符串进行操作,实际上是创建一个新的String对象。 2. **字符数组value**:每个String对象内部都有一个char[]类型的value数组,它是字符串的底层实现。所有的字符串操作(如长度计算、查找、截取等)都基于这个数组。 3. **isEmpty()方法**:该方法检查字符串是否为空,通过访问value数组的长度来实现,如果长度为0,则返回true。 4. **字符串常量池**:Java中有字符串常量池的概念,相同的字符串字面量(如"123")会被映射到池中的一个对象,这样可以避免重复创建,提高效率。因此,"s1 == s2"可能会返回true,而"Strings3 = new String("123")"会创建新对象,因为后者不会直接从池中获取。 5. **equals()方法**:虽然Java没有重载==操作符用于字符串内容的比较,但String类提供了equals()方法,用于比较两个字符串是否具有相同的字符序列。这与==的区别在于,equals()比较的是字符串内容,而不仅仅是对象引用。 6. **字符串比较的疑惑**:在比较字符串时,需要注意字符串对象的引用和内容。例如,尽管"Strings1="123"; Strings2="123";"看起来相同,但由于创建方式不同,它们的引用地址可能不一致。而"Strings3 = new String("123");"会创建新对象,所以"Strings1 == s3"的结果为false。 7. **常见操作**: - 检查字符串是否为空:`if (str.isEmpty()) {...}` - 长度计算:`int length = str.length();` - 字符串拼接:使用"+"或者`StringBuilder`或`StringBuffer`类进行连接,避免频繁创建新对象 - 截取子串:`String substr = str.substring(startIndex, endIndex);` - 查找子串:`int index = str.indexOf(subStr);` - 转换大小写或替换字符:使用`toUpperCase()`、`toLowerCase()`、`replace()`等方法 Java字符串的学习涵盖了字符串的基本构造、操作、比较以及内存管理等方面,理解这些核心概念对于编写高效、健壮的Java代码至关重要。
public String final String{} //由final关键字修饰
字符串类String中有一个char[] value数组,这个在Java中表示字符串的本质
任何字符串在初始化的时候,都会首先初始化为字符数组,然后其他方法大多数都是对这个字符数组的处理
比如isEmpty()的源码:return value.length == 0;
字符串是恒定不可变的,Java中也存在一个字符串常量
每一个字符串常量都是String类的一个具体对象
如:"123" 就是一个字符串对象
String类的构造函数简介
String(),创建出一个空字符串"".
String str = new String();额 String str = ""; 是同一回事儿
String(String str), 示例:String str = new String("123");
说明: String str = "123"; 同String str = new String("123");使用起来一样的,
区别是:后面一个会生成两个对象(一个""空对象和一个有内容的对象)
Java中字符串的比较:
==: 在Java并没有运算符的重载,只是单纯用来比较对象的引用地址是否相等
equals:是Object中的方法,被String中的equals重写了,比较的是是否具有相同的字符序列(字符串内容)
字符串比较中的一个疑问:
String s1 = "123";
String s2 = "123";
String s3 = new String("123");
System.out.println(s1 == s2); //比较对象的引用地址,由于存在字符串常量池,相同的字符串会找指向同一个对象
System.out.println(s1 == s3); //String s3 = new String("123"); 这种方式 会产生新的"123"对象
String s1 = "abc";
String s2 = new String("abc");
String s3 = "abc";
syso(s1 == s2); //false 遇到new关键字,无论如何都会重新创建一个对象,即使这个"abc"对象已经存在
syso(s1 == s3); //true 这里没有new,那么先会去原来的字符串常量池中寻找"abc"
字符串常见的操作有哪些:
1.获取
1.1字符串长度:length(); //数组的长度是属性,字符串是方法
1.2判断位置获取字符串上的某个字符:char charAt(int index);
1.3根据给定的字符/字符串,得到该字符串/字符串在原字符串中的位置。找不到返回-1
indexOf(int ch);
indexOf(int ch, int fromIndex);
indexOf(String str);
indexOf(String str, int fromIndex);
lastIndexOf(int ch);
lastIndexOf(int ch, int fromIndex);
lastIndexOf(String str);
lastIndexOf(String str, int fromIndex); //可以用到的地方:字符串很长,明知道目标字符串可能出现在最后的位置
剩余9页未读,继续阅读
- 粉丝: 34
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JDK 17 Linux版本压缩包解压与安装指南
- C++/Qt飞行模拟器教员控制台系统源码发布
- TensorFlow深度学习实践:CNN在MNIST数据集上的应用
- 鸿蒙驱动HCIA资料整理-培训教材与开发者指南
- 凯撒Java版SaaS OA协同办公软件v2.0特性解析
- AutoCAD二次开发中文指南下载 - C#编程深入解析
- C语言冒泡排序算法实现详解
- Pointofix截屏:轻松实现高效截图体验
- Matlab实现SVM数据分类与预测教程
- 基于JSP+SQL的网站流量统计管理系统设计与实现
- C语言实现删除字符中重复项的方法与技巧
- e-sqlcipher.dll动态链接库的作用与应用
- 浙江工业大学自考网站开发与继续教育官网模板设计
- STM32 103C8T6 OLED 显示程序实现指南
- 高效压缩技术:删除重复字符压缩包
- JSP+SQL智能交通管理系统:违章处理与交通效率提升