飞道的博客

面试必背,深入理解Java String

168人阅读  评论(0)

Java String

Java String本质上是一个连续的字符数组


创建字符串

1. 直接String对象赋值创建。

String s1 = "Hello World!";

2. 使用String类的构造函数创建。

String s2 = new String("Hello World!");


String是单例的(常量)

举例说明,如下列结果为true,为什么s1和s3是两个不同的变量为什么会相同呢? 这是因为在同一个运行环境下直接赋值创建的String对象会放在一个常量池里,当创建相同的String时,二者会指向同一个引用的字符串。

String s1 = "Hello World!";
String s3 = "Hello World!";
System.out.println(s1 == s3);

字符串常用操作

方法 作用
+ 可用于字符串拼接。更高效的方法:使用StringBuilder的append方法进行字符串拼接
length() String的length方法,返回字符串的长度,注意数组的length不是方法,不需要使用括号
subString(from,to) 字符串截取,返回结果从索引from位置到to的前一个位置
trim() 去除字符串前后的空格
split() 字符串拆分,返回拆分后的数组
toUpperCase() 大写转换
toLowerCase() 小写转换

字符串比较

Java String的比较常常作为面试题来考面试者。 如String的equals方法和==的区别?String用哪种方式进行比较?使用String直接赋值和new String()的区别等等…这些都是常见的面试题。

equals方法源码:可知,String的字符串比较思路为先判断是否是同一个引用,同一个引用一定是相同的。若不是同一个引用则先比较长度,长度一样再确定是否每一个位置的字符都相同。

public boolean equals(Object anObject) {
   
	//同一个引用一定是相同的
    if (this == anObject) {
   
        return true;
    }
    //不同引用先比较长度,长度一样再确定是否每一个位置的字符都相同
    if (anObject instanceof String) {
   
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
   
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
   
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

String新特性

Java 9起,增加了压缩字符串的机制,即当一个String字符串中只含有SO-8859-1/Latin-1编码集合内的字符时,一个字符只需要1 byte来存储,而不是4 byte。

Java 13中又增加了String文本段落的用法,当然很多其他的语言早就支持了,使用方法如下。

String s= """
          Java 13 新特性
          文本段落
                   """;

转载:https://blog.csdn.net/weixin_44671737/article/details/116615066
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场