编程知识 cdmana.com

Java学习_Java核心类

  • 字符串和编码
    • 字符串在String内部是通过一个char[]数组表示的,因此,可以按下面的写法:
      String s2 = new String(new char[] {'H', 'e', 'l', 'l', 'o', '!'});

    • Java字符串的一个重要特点就是字符串不可变。这种不可变性是通过内部的private final char[]字段,以及没有任何修改char[]的方法实现的。
    • Java编译器在编译期,会自动把所有相同的字符串当作一个对象放入常量池。
    • 两个字符串比较,必须总是使用equals()方法。
    • 要忽略大小写比较,使用equalsIgnoreCase()方法。
    • String还提供了isEmpty()isBlank()来判断字符串是否为空和空白字符串。
    • 拼接字符串使用静态方法join(),它用指定的字符串连接字符串数组。
      String[] arr = {"A", "B", "C"};String s = String.join("***", arr); // "A***B***C"

    • 字符串提供了formatted()方法和format()静态方法,可以传入其他参数,替换占位符,然后生成新的字符串。
      1 public class Main {2  public static void main(String[] args) {3   String s = "Hi %s, your score is %d!";4   System.out.println(s.formatted("Alice", 80));5   System.out.println(String.format("Hi %s, your score is %.2f!", "Bob", 59.5));6  }7 }

    • 要把任意基本类型或引用类型转换为字符串,可以使用静态方法valueOf()
      1 String.valueOf(123); // "123"2 String.valueOf(45.67); // "45.67"3 String.valueOf(true); // "true"4 String.valueOf(new Object()); // 类似java.lang.Object@636be97c

    • new String(char[])创建新的String实例时,它并不会直接引用传入的char[]数组,而是会复制一份,所以,修改外部的char[]数组不会影响String实例内部的char[]数组,因为这是两个不同的数组。
    • 那我们经常使用的UTF-8又是什么编码呢?因为英文字符的Unicode编码高字节总是00,包含大量英文的文本会浪费空间,所以,出现了UTF-8编码,它是一种变长编码,用来把固定长度的Unicode编码变成1~4字节的变长编码。通过UTF-8编码,英文字符'A'UTF-8编码变为0x41,正好和ASCII码一致,而中文'中'UTF-8编码为3字节0xe4b8ad
  • StringBuilder

    • String虽然可以直接拼接字符串,但是,在循环中,每次循环都会创建新的字符串对象,然后扔掉旧的字符串。
    • 为了能高效拼接字符串,Java标准库提供了StringBuilder,它是一个可变对象,可以预分配缓冲区,这样,往StringBuilder中新增字符时,不会创建新的临时对象。
    • StringBuilder还可以进行链式操作。
      1 public class Main { 2  public static void main(String[] args) { 3   var sb = new StringBuilder(1024); 4   sb.append("Mr ") 5   .append("Bob") 6   .append("!") 7   .insert(0, "Hello, "); 8   System.out.println(sb.toString()); 9  }10 }

    • 查看StringBuilder的源码,可以发现,进行链式操作的关键是,定义的append()方法会返回this,这样,就可以不断调用自身的其他方法。
    • 对于普通的字符串+操作,并不需要我们将其改写为StringBuilder,因为Java编译器在编译时就自动把多个连续的+操作编码为StringConcatFactory的操作。在运行期,StringConcatFactory会自动把字符串连接操作优化为数组复制或者Stri.........

版权声明
本文为[程序猿欧文]所创,转载请带上原文链接,感谢
https://my.oschina.net/mikeowen/blog/4839541

Scroll to Top