java-String(特殊的类)

String

在Java中,String 是一个特殊的类,用于表示和操作字符串(即字符序列)。虽然 String 看起来像是一个基本数据类型,但实际上它是一个引用类型,属于 java.lang 包的一部分。

特点

不可变性

  • String 对象一旦创建,其内容就不能被修改。
  • 任何对 String 的修改操作(如拼接、替换等)都会生成一个新的 String 对象,而不是修改原有对象。
  • 这种设计使得 String 是线程安全的,并且可以被缓存(如字符串常量池)。

字符串常量池(String Pool)

  • Java 使用字符串常量池来优化字符串的存储。
  • 当使用双引号(“…”)创建字符串时,JVM
    会首先检查字符串常量池中是否存在相同的字符串。如果存在,则直接返回池中的引用;如果不存在,则在池中创建一个新的字符串对象。

常用操作

String 提供了丰富的方法来操作字符串,例如:

  • 获取长度:length()
  • 拼接字符串:concat() 或 +
  • 比较字符串:equals()、equalsIgnoreCase()
  • 查找子字符串:indexOf()、contains()
  • 截取子字符串:substring()
  • 替换字符或字符串:replace()
  • 分割字符串:split()
  • 大小写转换:toLowerCase()、toUpperCase()

String 创建方式

在 Java 中,String 可以通过以下两种方式创建:

  • 使用双引号(字面量方式)
String str1 = "Hello, World!";

这种方式会检查字符串常量池,如果池中已存在相同内容的字符串,则直接返回池中的引用

  • 使用new关键字
String str2 = new String("Hello, World!");

这种方式会在堆内存中创建一个新的 String 对象,即使字符串常量池中已经存在相同内容的字符串。

String 不可变特性

String str = "Hello, Java!";

// 获取长度
int length = str.length(); // 12

// 比较字符串
boolean isEqual = str.equals("Hello, Java!"); // true

// 查找子字符串
int index = str.indexOf("Java"); // 7

// 截取子字符串
String subStr = str.substring(7); // "Java!"

// 替换字符
String newStr = str.replace('a', 'o'); // "Hello, Jovo!"

// 分割字符串
String[] parts = str.split(", "); // ["Hello", "Java!"]

String 底层原理

  • 在 Java 8 及之前,String 内部使用 char[] 数组来存储字符。
  • 从 Java 9 开始,为了节省内存,String 改为使用 byte[] 数组,并引入了一个编码标志(coder)来区分 Latin-1 和 UTF-16 编码。

String与其他类

StringBuilder 和 StringBuffer:

  • 这两个类用于处理可变的字符串。
  • StringBuilder 是非线程安全的,性能更高。
  • StringBuffer 是线程安全的,性能稍低。

CharSequence 接口:

  • String 实现了 CharSequence 接口,因此它可以被用于任何需要 CharSequence 的地方。

总结

  • String 是 Java 中的一个引用类型,属于 java.lang 包。
  • 它是不可变的,任何修改操作都会生成一个新的对象。
  • 通过字符串常量池优化存储,提供了丰富的操作方法。
  • 在实际开发中,如果需要频繁修改字符串,建议使用 StringBuilder 或 StringBuffer。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下陈平安

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值