String字符串

String字符串

String字符串的特点

  1. 字符串的内容永不可变 。 重点
  2. 正是因为字符串不可变,所以字符串可以共享使用。
  3. 字符串效果相当于是char[] 字符数组,但是底层原理是byte[] 字节数组。

关于字符串内容永不可变

String str = “Hello”;
str实际上是对“Hello”的引用,”Hello”才是在堆中被创建的字符串对象,里面存的的字符串内容是Hello,而str则存放的是Hello这个字符串对象的地址。

当出现这种情况时:str = “world”;
原本Hello那个字符串的内容并没有改变,只是在堆中新创建了一个world的字符串对象,而str成了world的引用,存放的是world这个字符串对象的地址。
所以字符串内容是永不可变的,你感觉到的变了其实是引用地址的改变。


创建字符串的常见方式(3+1种)

三种构造方法

  1. public String(); 创建一个空白字符串,不含有任何内容。

  2. public String(char[] array); 根据字符数组的内容,来创建对应的字符串。

  3. public String(byte[] array); 根据字节数组的内容,来创建对应的字符串。

一种直接创建

String str = “Hello”;


String类中常用的一些方法

与转换相关的方法

public char[] toCharArray(); 将当前字符串拆封为字符数组作为返回值。

public byte[] getBytes(); 获得当前字符串底层的字节数组。

public String replace(CharSequence oldString,CharSequence newString);将所有出现的老字符串替换为新字符串,返回替换之后的结果字符串。CharSequence意思就是说可以接收字符串类型。游戏中的关键字屏蔽可以用这种方法

与比较相关的方法

==用于字符串的比较是对对象的地址进行比较,如果要对内容进行比较,可以用下面两个方法。

public boolean equals(Object obj); 参数可以是任何对象,只有参数是一个字符串并且内容相同才会返回true,否则返回false。

“Hello”.equals(str);
注意:这样写比str.equals(“Hello”)好,因为str.equals(“Hello”)可能会抛出空指针异常,str是一个变量,而”Hello”.equals(str)不会抛出这个异常,因为“Hello”是一个常量,永远不会空指针。

public boolean equalsIgnoreCase(String str);忽略大小写进行字符串比较

str = “ABC”;
“abc”.equalsIgnoreCase(str) = true;

与获取相关的一些方法

public int length(); 获取字符串中字符的个数,拿到字符串长度。

public String concat(String str); 将当前字符串和参数字符串拼接成为返回值新的字符串。

public char charAt(int index); 获取指定索引位置的单个字符。

public int indexOf(String str); 查找参数字符串在本字符串中首次出现的位置,若不存在则返回-1。

字符串的截取方法

public String substring(int index); 从参数位置开始一直到字符串末尾返回新字符串。

public String substring(int begin, int end); 从begin开始一直到end结束返回新字符串,包括begin不包括end

分割字符串的方法

public String[] split(String regex); 按照参数的规则,将字符串切割成若干部分。

split方法的参数实际上是一个“正则表达式”,如果用英文句点“.”进行切分,必须写“\\.”,因为需要转义。


基本类型与字符串类型之间的相互转换

基本类型与字符串类型之间的互相转换。

基本类型–>字符串(String):

  1. 基本类型的值 + “”。 最简单的方法,工作中常用

  2. 包装类的静态方法toString(参数),不是Object类的toString

static String toString(包装类的基本类型参数);返回一个表示指定整数的 String 对象。

  1. String类的静态方法valueOf(基本类型参数);返回参数的字符串表示形式。

字符串(String)–>基本类型:

使用包装类的静态方法parse基本类型名称(字符串)

如:Integer类:static int parseInt(String s);


关于常量池的概念

  1. 对于引用类型来说,==进行的是地址值的比较。

  2. 双引号直接写的字符串在常量池当中,new的不在池中。

    public static void main(String[] args) {
        String str1 = "a,b,c";
        String str2 = "a,b,c";
    
        char[] array = {'a', 'b', 'c'};
        String str3 = new String(array);
    
        System.out.println(str1 == str2);   //true
        System.out.println(str1 == str3);   //false
        System.out.println(str2 == str3);   //false
    }

原理

Principle



以上是对String字符串类型有关内容的一些小小整理,想要了解更多请自己查询有关知识。

  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信