Java字符串

Posted yysy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java字符串相关的知识,希望对你有一定的参考价值。

字符串的不可变性

  • 一旦一个string对象在内存(堆)中被创建出来,他就无法被修改。
  • String类的所有方法都没有改变字符串本身的值,都是返回了一个新的对象。
  • 如果需要一个可修改的字符串,应该使用StringBuffer 或者 StringBuilder。否则会有大量时间浪费在垃圾回收上,因为每次试图修改都有新的string对象被创建出来。

substring方法

substring(int beginIndex, int endIndex)方法截取字符串并返回其[beginIndex,endIndex-1]范围内的内容。

字符串替换相关方法

  1. replace(CharSequence target, CharSequence replacement) ,用replacement替换所有的target,两个参数都是字符串。
  2. replaceAll(String regex, String replacement) ,用replacement替换所有的regex匹配项,regex是个正则表达式,replacement是字符串。
  3. replaceFirst(String regex, String replacement) ,基本和replaceAll相同,区别是只替换第一个匹配项。

字符串拼接

  • 使用+拼接字符串
  • String对象的concat方法
  • 可以扩充和修改的StringBuffer,使用append方法进行字符串拼接
  • StringBuilder的append方法(StringBuilder和StringBuffer类似,StringBuffer是线程安全的)

switch对字符串的支持

  • switch对int的判断是直接比较整数的值
  • switch对char类型进行比较的时候,实际上比较的是ascii码
  • switch对字符串进行比较的实际是哈希值,然后通过使用equals方法比较进行安全检查
  • 其实switch只支持一种数据类型,那就是整型,其他数据类型都是转换成整型之后在使用switch的

Java字符串池

在JVM中,为了减少相同的字符串的重复创建,为了达到节省内存的目的。会单独开辟一块内存,用于保存字符串常量,这个内存区域被叫做字符串常量池。

当代码中出现双引号形式(字面量)创建字符串对象时,JVM 会先对这个字符串进行检查,如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回;否则,创建新的字符串对象,然后将这个引用放入字符串常量池,并返回该引用。

字符串长度限制

字符串有长度限制,在编译期,要求字符串常量池中的常量不能超过65535,并且在javac执行过程中控制了最大值为65534。

在运行期,长度不能超过Int的范围,否则会抛异常。

以上是关于Java字符串的主要内容,如果未能解决你的问题,请参考以下文章

通过 Java 正则表达式提取 semver 版本字符串的片段

VSCode创建自定义用户片段

将字符串数据从Activity发送到片段[关闭]

Java 求解划分字母区间

将字符串 XML 片段转换为 Java 中的文档节点

Java程序片段