0
点赞
收藏
分享

微信扫一扫

Java String类基本使用

小迁不秃头 2023-07-05 阅读 71

Java String类基本使用

String类是Java中最常用的类之一,它表示字符串。字符串是由字符数组组成的,但String类对字符数组进行了封装,提供了许多实用方法来操作字符串。

String类的简单描述

String是final类,表示不可变的字符序列。String对象一旦创建后,其值就不能被更改。要得到字符串的不同版本,只能创建新的字符串对象。 String类有很多构造方法,最常用的有:

  • String(char[]):将字符数组转换为字符串
  • String(byte[]):将字节数组转换为字符串
  • String():创建一个空白字符串
  • String(String):将字符串常量或字符串对象转换为字符串

String类常用方法

  • int length():返回字符串的长度
  • char charAt(int index):返回指定位置的字符
  • boolean isEmpty():判断字符串是否为空
  • String toUpperCase():将字符串转换为大写
  • String toLowerCase():将字符串转换为小写
  • String trim():去除字符串两边的空格
  • boolean contains(String s):判断字符串中是否包含指定的子字符串
  • boolean startsWith(String s):判断字符串是否以指定的子字符串开头
  • boolean endsWith(String s):判断字符串是否以指定的子字符串结尾
  • int indexOf(String s):返回子字符串第一次出现的索引
  • String substring(int beginIndex, int endIndex):截取字符串的一部分
  • boolean equals(Object obj):比较两个字符串的内容是否相同 下面是一个简单的示例代码:
public class StringDemo {
    public static void main(String[] args) {
        String s = "Hello World!";
        System.out.println(s.length()); // 11
        System.out.println(s.charAt(0)); // H
        System.out.println(s.isEmpty()); // false
        System.out.println(s.toUpperCase()); // HELLO WORLD!
        System.out.println(s.toLowerCase()); // hello world! 
        System.out.println(s.trim());      // Hello World!
        System.out.println(s.contains("or")); // true
        System.out.println(s.startsWith("He")); // true
        System.out.println(s.endsWith("!")); // true
        System.out.println(s.indexOf("l"));  // 2
        System.out.println(s.substring(6, 11)); //World
        System.out.println(s.equals("Hello World!")); // true
    } 
}

除了上面介绍的方法外,String类还有许多其他的方法:

  • String replace(char old, char new):将字符串中所有旧的字符替换为新的字符
  • String[] split(String regex):将字符串按照给定的正则表达式 regex拆分为多个字符串
  • String concat(String str):将指定的字符串连接到此字符串的结尾。等价于用“+”操作符。
  • boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。
  • String[] chars(): 将字符串转换为字符数组。
  • byte[] getBytes(): 将字符串转换为字节数组。
  • boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写。 示例代码:
public class StringDemo2 {
    public static void main(String[] args) {
        String s = "Hello World!";
        String replace = s.replace('l', 'x'); 
        System.out.println(replace);   // Hexxo Worxd!

        String[] split = s.split(" ");
        System.out.println(Arrays.toString(split)); // [Hello, World!]

        String concat = s.concat(" Append!");
        System.out.println(concat);   // Hello World! Append!

        boolean matches = s.matches("H[a-z]* W[a-z]*!");
        System.out.println(matches);   // true  

        char[] chars = s.chars();
        System.out.println(Arrays.toString(chars)); 
        // [H, e, l, l, o,  , W, o, r, l, d, !]

        byte[] bytes = s.getBytes();
        System.out.println(Arrays.toString(bytes)); 
        // [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]

        boolean equals = s.equalsIgnoreCase("hello world!");
        System.out.println(equals);   // true
    }
} 

String对象的比较

String s = "abc"; String s1 = "abc"; 那么s和s1是否相同?为什么?

s 和 s1 虽然的值相同,但它们是两个不同的字符串对象。 在Java中,字符串对象一旦创建,其值就不可变。每当向字符串对象赋值时,实际上是创建了一个新的字符串对象。 所以 s 和 s1 是两个不同的字符串对象,虽然它们的值相同。可以使用 == 操作符来比较两个字符串对象的地址是否相同,使用 .equals() 方法来比较两个字符串的值是否相同。 示例代码:

String s = "abc"; 
String s1 = "abc";

System.out.println(s == s1); // false
System.out.println(s.equals(s1)); // true

之所以使用 == 比较地址,是因为 String 对象是不可变的,如果内容相同,为了节省空间,String会维护一个字符串常量池。字符串常量池中不会有两个内容相同的字符串。 所以如果使用 "abc" 这样的字符串常量来创建 String 对象,s 和 s1 的地址实际上是相同的。如:

String s = "abc";  
String s1 = "abc";
System.out.println(s == s1); // true

总结

  1. String对象是不可变的,所以它们可以被共享。例如:
String s = "abc";
String s2 = "abc";

这里的s和s2实际上是同一个对象。 2. 因为String对象是不可变的,所以当一个String对象被改变时,实际上是创建了一个新的String对象。例如:

String s = "abc";
s = s + "d";

这里的s最终指向一个新的String对象"abcd"。 3. 由于String对象的不可变性,可以安全的在多个线程中共享同一个String对象。 4. 频繁的改变字符串内容会导致大量临时String对象存活,降低GC效率。这种情况下,最好使用StringBuilder。 5. String类继承自Object类,实现了Serializable接口,所以String对象可以被序列化。 6. String类有一个常量池,它里面存放着所有字符串字面量和String#intern()方法加入的字符串。 7. String的==比较的是对象的引用(地址),而.equals()是比较字符串的内容。 8. 可以使用String#intern()方法将字符串对象添加到常量池中。如果常量池中已经存在一个等于此 String 的字符串,则返回常量池中字符串的引用;否则,将此 String 添加到常量池中,并返回此 String 引用。 9. String是final类,意味着它的任何方法都无法被重写。 String类是Java开发中使用频率最高的类之一,理解它的内部原理和使用方法对开发非常重要。

举报

相关推荐

0 条评论