1.字符串概述及特点。
java.lang.String类代表了字符串。在程序中,所有的双引号的字符串,都是String类的对象。(也就是没有new,也照样是)
特点:
(1)字符串的内容永不可更改。(下面这个实例,变得只是strA这个变量指向的地址值,但“Hello”和“Java”这两个字符串都是存在的)
(2)正是因为字符串是永不可更改的,所以字符串是可以共享使用的。
(3)字符串效果上相当于是char[ ]字符数组,但是底层原理是byte[ ]字节数组。
2.创建字符串的方法。
三种构造方法:String 变量名 = new 构造方法();
public String(); 创建一个空白字符串,不含有任何内容。
public String(char[] array); 根据字符数组的内容,创建对应的字符串。
public String(char[] array);根据字节数组的内容,创建对应的字符串。
一种直接创建:String 变量名 = “xxxxx”;右边双引号中就是要定义的字符串。
3.字符串常量池。
在程序中,直接创建的字符串(就是打双引号创建的),它的位置在字符串常量池中。new创建的不在常量池当中。
对于基本类型来说,==是进行数值的比较。
对于引用类型来说,==是进行地址值的比较。
实例:str1和str2都是使用直接创建的方法,所以存放在堆中的字符串常量池,又因为他们转换为byte都是同一个字节数组,所以会被共享使用,所以他们的地址值是相同的。而字符数组转换为String类型,是通过构造方法,所以是在堆中的其他地方创建的,由char数组转为byte数组,然后再将地址赋给str3。
4.字符串的常见方法
(1)字符串的内容比较。
public boolean equals(Object obj):参数可以是任何对象。只有参数是一个字符串并且内容相同,才会返回true。
举例:对象名1.equals(对象名2);
注意事项:
(1)任何对象都能用Object进行接收。
(2)0equals方法具有对称性,也就是a.equals(b)和b.equals(a)相同
(3)如果比较一个常量和一个变量,推荐把常量字符串写在前面。例如:“abc”.equals(str);
public boolean equalsIgnoreCase(String str),忽略大小写,进行内容比较
(2)字符串获取相关的方法。
public int length(); 获取字符串当前含有的字符串的个数,拿到字符串的长度。
public String concat(String str);将当前字符串和参数字符串拼接,返回新的字符串
public char charAt(int index); 获取指定索引值位置的单个字符(索引从0开始)
public int indexOf(String str); 查找参数字符串在本字符串中首次出现的索引位置,如果没有返回-1
(3)字符串截取方法。
public String substring(int index);截取从参数索引位置到末尾的字符串,返回新的字符串
public String substring(int begin,int end); 截取从begin位置到end位置的中间字符串,返回新的字符串。[begin,end)
(4)字符串转换方法。
public char[ ] toCharArray(); 将当前字符串拆分成字符数组作为返回值
public byte[ ] getBytes(); 获得当前的字符串底层 的字节数组
public String replace(charSequence oldString,charSequence newString); 将出现的老字符串替换成新的字符串,返回替换后的字符串。(charSequence可以当做是字符串)
(5)字符串分割方法。
public String[ ] split(String regex);按照参数的规则,将字符串切分为若干个部分。切完之后返回的是一个字符串数组。
注意:split方法的参数其实是一个正则表达式,所以,如果要想按照“.”来进行分割,必须用“\\.”来表示这个英文句点。