关于Java JDK中内置的一个类:java.lang.String
String类的知识点汇总
1、String表示字符串类型,属于引用数据类型,不属于基本数据类型。
2、在java中随便使用双引号括起来的都是String对象。例如:“abc”,“def”,“hello world!”,这是3个String对象。
3、java中规定,双引号括起来的字符串,是不可变的,也就是说"abc"自出生到最终死亡,不可变,不能变成"abcd",也不能变成"ab"
4、在JDK当中双引号括起来的字符串,例如:“abc” "def"都是直接存储在“方法区”的“字符串常量池”当中的。
为什么SUN公司把字符串存储在一个“字符串常量池”当中呢。因为字符串在实际的开发中使用太频繁。为了执行效率,所以把字符串放到了方法区的字符串常量池当中。
如果是采用双引号引起来的字符串常量,首先会到常量池中去查找,如果存在就不再分配,如果不存在就分配
String s = “abc”; //s为方法区中字符串常量池里字符串的引用
String s = new String(“abc”); //s为堆内存区String对象的引用,对象中再保存方法区中字符串常量池里字符串的引用
5、对String在内存存储方面的理解:
第一:字符串一旦创建不可变。
第二:双引号括起来的字符串存储在字符串常量池中。
第三:字符串的比较必须使用equals方法。
第四:String已经重写了toString()和equals()方法。
String的构造方法
String s = new String(byte数组);
String s = new String(byte数组, 起始下标, 长度);
String s = new String(char数组);
String s = new String(char数组, 起始下标, 长度);
String类常用的21个方法
1(掌握)char charAt(int index)
返回指定索引处的 char 值
2(了解)int compareTo(String anotherString)
如果参数字符串等于此字符串,则返回值 0
如果这两个字符串不同,那么它们要么在某个索引处的字符不同(该索引对二者均为有效索引), 要么长度不同,或者同时具备这两种情况。如果它们在一个或多个索引位置上的字符不同,假设 k 是这 类索引的最小值;则在位置 k 上具有较小值的那个字符串(使用 < 运算符确定),其字典顺序在其他字 符串之前。在这种情况下,compareTo 返回这两个字符串在位置 k 处两个char 值的差,即值:
this.charAt(k)-anotherString.charAt(k)
如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,compareTo 返回这两个字符串长度的差,即值:
this.length()-anotherString.length()
3(掌握)boolean contains(CharSequence s)
判断前面的字符串中是否包含后面的子字符串。
4(掌握)boolean endsWith(String suffix)
判断当前字符串是否以某个子字符串结尾。
5(掌握)boolean startsWith(String prefix)
判断某个字符串是否以某个子字符串开始。
6(掌握)boolean equals(Object anObject)
比较两个字符串必须使用equals方法,不能使用“==”
7(掌握)boolean equalsIgnoreCase(String anotherString)
判断两个字符串是否相等,并且同时忽略大小写。
8(掌握)byte[] getBytes()
将字符串对象转换成字节数组
9(掌握)int indexOf(String str)
判断某个子字符串在当前字符串中第一次出现处的索引(下标)
10(掌握)int lastIndexOf(String str)
判断某个子字符串在当前字符串中最后一次出现的索引(下标)
11(掌握)int length()
面试题:判断数组长度和判断字符串长度不一样
判断数组长度是length属性,判断字符串长度是length()方法。
12(掌握)boolean isEmpty()
判断某个字符串是否为“空字符串”。底层源代码调用的应该是字符串的length()方法
13(掌握)String replace(CharSequence target, CharSequence replacement)
替换字符串
String的父接口就是:CharSequence
14(掌握)String[] split(String regex)
拆分字符串
15(掌握)String substring(int beginIndex) 参数是起始下标。
截取字符串
16(掌握)String substring(int beginIndex, int endIndex)
beginIndex起始位置(包括)
endIndex结束位置(不包括)
17(掌握) char[] toCharArray()
将字符串转换成char数组
18(掌握)String toLowerCase()
转换为小写。
19(掌握)String toUpperCase();
转换为大写
20(掌握)String trim();
去除字符串前后空白
21(掌握)static String valueOf()
String中只有一个方法是静态的,不需要new对象, 这个方法叫做valueOf
作用:将“非字符串”转换成“字符串”
这个静态的valueOf()方法,参数是一个对象的时候,会自动调用该对象的toString()方法
通过源代码可以看出:为什么输出一个引用的时候,会调用toString()方法!!!println调用valueOf,valueOf再调用toString
本质上System.out.println()这个方法在输出任何数据的时候都是先转换成字符串,再输出。