Java学习记录之String
发布日期:2021-05-24 05:19:32 浏览次数:22 分类:精选文章

本文共 2555 字,大约阅读时间需要 8 分钟。

Java String类简明指南

1. String的定义与特性

Java中的字符串是由String类表示的。所有使用双引号声明的字符串,都直接是String类的实例,无需显式使用new操作符。

核心特性:不可变性(Immutability)

  • 内容永不可变:一旦字符串创建完成,它的值不会改变。
  • 可共享:由于内容不可变,相同的字符串内容可以被多个引用共享,节省内存。
  • 底层机制:字符串实际上是基于byte数组存储的,而不是直接的char数组。
  • 2. 创建字符串的方式

    String类提供零种构造方法,主要方式有:

    基本方法

  • public String:创建空字符串。
    String str1 = new String(); // 内容为空
  • public String(char[] array):通过字符数组构建字符串。
    char[] charArray = { 'A', 'B', 'C' };
    String str2 = new String(charArray); // "ABC"
  • public String(byte[] array):通过字节数组构建字符串。
    byte[] byteArray = { 97, 98, 99 };
    String str3 = new String(byteArray); // "abc"
  • 直接创建方式

    public String(...)之外,还可以通过直接用双引号创建:

    String str4 = "Hello World"; // 这个字符串会被存储在字符串常量池中

    3. 字符串与常量池的关系

    程序中直接用双引号声明的字符串,都会被存储在**字符串常量池(String Constant Pool)**中。 这意味着,如果多次使用相同的字符串字面值,JVM会重复引用同一对象,而不是每次都创建新实例。

    4. 字符串的值与引用比较

    • 对于引用类型(如String),== 进行的是地址值比较,而不是值比较。
      String str1 = "abc";
      String str2 = "abc";
      System.out.println(str1 == str2); // true

      这是因为str1和str2指向的是同一个字符串实例。

    • 如果需要比较字符串的内容,可以调用equals方法:
      System.out.println(str1.equals("abc")); // true

      注意事项

      • 总是将常量放在等式左边,避免参数为null异常。例如,"abc".equals(str)更安全。
    • 如果需要忽略大小写比较,可以使用equalsIgnoreCase方法:
      System.out.println("Hello".equalsIgnoreCase("hello")); // true

    5. String的基本操作方法

    字符串类提供了一系列操作方法,常用方法包括:

    5.1 获取字符串长度

    length()方法返回字符串的长度。

    System.out.println("HelloWorld".length()); // 10

    5.2 拼接字符串

    concat(String str)方法拼接字符串。

    String strConcat1 = "Hello".concat("World"); // "HelloWorld"

    5.3 获取单个字符

    charAt(int index)方法获取指定索引位置的字符。

    System.out.println("Hello".charAt(1)); // e

    5.4 查找子字符串

    indexOf(String str)方法返回子字符串的首次出现索引,返回-1表示未找到。

    System.out.println("HelloWorld".indexOf("llo")); // 2

    5.5 截取子字符串

    • substring(int beginIndex):从指定起点截取到末尾。
      String sub1 = "HelloWorld".substring(5); // "World"
    • substring(int beginIndex, int endIndex):从beginIndex开始,到endIndex结束(不包含endIndex)。
      String sub2 = "HelloWorld".substring(4,7); // "owo"

    5.6 转换到字符数组和字节数组

    • toCharArray():将字符串转换成字符数组。
      char[] chars = "Hello".toCharArray();
      System.out.println(chars[0]); // H
    • getBytes():将字符串转换成字节数组。
      byte[] bytes = "abc".getBytes(); // addslashes特定编码(如UTF-8)

    5.7 替换字符

    replace(CharSequence oldString, CharSequence newString):替换所有匹配项。

    String replacedStr = "How are you".replace("o", "*");
    System.out.println(replacedStr); // H*w r* u*

    5.8 分割字符串

    split(String regex):根据正则表达式分割字符串。

    • 不要忘记使用正则表达式的特殊字符时,需前置反斜杠。
      String strSplit = "aaa,bbb,ccc";  
      String[] parts = strSplit.split(",");
      System.out.println(parts[1]); // BBB
    • 如果使用英文句点分割,需写成"\\."
      String strSplit2 = "xxx.yyy.zzz";  
      String[] parts2 = strSplit2.split("\\.");

      注意事项:split方法返回的数组大小取决于分割规则。


    这篇文章以简洁的方式详细介绍了Java字符串的核心特性、创建方式以及常用操作方法,适合开发者快速入门和日常使用。

    上一篇:Java学习记录之static
    下一篇:Java学习记录之ArrayList集合

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年04月13日 23时51分14秒