从概念上而言,Java字符串就是Unicode字符序列。由于Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类String,每个用双引号的括起来的字符串都是String类的一个实例:
String t = ""; // 空字符串 String t = "Hello"; //字符串t的内容为Hello
很自然地,我们会考虑对字符串进行操作,比如取字符串中的子串进行操作,这里我们就要用到substring方法:
String t = "Welcome to Java world!"; String s = t. substring(0,4); //substring第一个参数表示从什么位置取字符常量,第二个参数表示取多少个字符常量
Java语言支持"+"拼接两个字符串,如果要把多个字符串拼接放在一起,用一个定界符分割,可以使用静态join方法:
String all = String.join("/","j","a","v","a"); System.out.println(all); // 输出j/a/v/a
//在String.join()方法中,第1个参数是分隔符,第2个参数是需要进行拼接的元素,可以是多个字符串,可以是字符串数组,可以是字符串队列。
要想更清楚了解String.join()方法,我们来看看源码:
//String.join() //delimiter 分隔符 //elements 需要连接的元素 public static String join(CharSequence delimiter, CharSequence... elements) { //判断是否为null,如果为null,抛出NullPointerException Objects.requireNonNull(delimiter); Objects.requireNonNull(elements); //构造一个分隔符为delimiter的实例 StringJoiner joiner = new StringJoiner(delimiter); //循环拼接 for (CharSequence cs: elements) { joiner.add(cs); } return joiner.toString(); } //StringJoiner构造器源码 //1个参数构造器 public StringJoiner(CharSequence delimiter) { //调用3个参数构造器 this(delimiter, "", ""); } //3个参数构造器 //delimiter 分隔符 //prefix 前缀 //suffix 后缀 public StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix) { //判断是否为null,如果为null,抛出NullPointerException Objects.requireNonNull(prefix, "The prefix must not be null"); Objects.requireNonNull(delimiter, "The delimiter must not be null"); Objects.requireNonNull(suffix, "The suffix must not be null"); //为成员变量赋值 //前缀 this.prefix = prefix.toString(); //分隔符 this.delimiter = delimiter.toString(); //后缀 this.suffix = suffix.toString(); this.emptyValue = this.prefix + this.suffix; } public StringJoiner add(CharSequence newElement) { //prepareBuilder()返回参数,调用append()方法 prepareBuilder().append(newElement); return this; } private StringBuilder prepareBuilder() { if (value != null) { value.append(delimiter); } else { value = new StringBuilder().append(prefix); } return value; }
Java的String类对象为不可变字符串,类似于final类。它有个优点就是:编译器可以共享字符串变量。看起来就像是将各种字符串放在公共的储存池里,字符串变量指向储存池中相应的位置。
另外java String 类比较字符串相等时时不能用“ == ”,只能用 "equals" 。
参考:
1.https://blog.csdn.net/qq_24404723/article/details/86064533
2.Java核心技术