day26.1常用类-String
一、string
1、String表示字符串类型,属于引用数据类型,不属于基本数据类型。
2、因为字符串在实际的开发中使用太频繁。为了执行效率,所以把字符串放到了方法区的字符串常量池当中。
3、在java中随便使用双引号括起来的都是String对象。例如:“abc”,“def”,“hello world!”,这是3个String对象。
4、java中规定,双引号括起来的字符串,是不可变的,也就是说"abc"自出生到最终死亡,不可变,不能变成"abcd",也不能变成"ab"
5、字符串的比较必须使用equals方法。
6、String已经重写了toString()和equals()方法。
7、堆区中是运行期分配的,常量池中是编译器分配的。
8、只要采用双引号赋值字符串,那么在编译期将会放到方法区中的字符串的常量池里,如果是运行时对字符串相加或相减会放到堆中(放之前会先验证方法区中是否含有相同的字符 串常量,如果存在,把地址返回,如果不存在,先将字符串常量放到池中,然后再返回该对 象的地址)
二、string的构造方法:查看API文档
String s = “abc”; 最常用
String s = new String(“abc”);
String s = new String(byte数组); byte[] b1={97,98,99}; String s3=new String(b1);
String s = new String(byte数组, 起始下标, 长度); String s4=new String(b1,0,2);
String s = new String(char数组); char[] c1={‘中’,‘国’,‘人’}; String s5=new String(c1);
String s = new String(char数组, 起始下标, 长度); String s6=new String(c1,1,2);
三、内存图
String s1="abc";
String s4=new String("chen");
System.out.println(s4);//自动调用已经重写以后的tostring()方法
String s1="chen";
String s2="chen";
System.out.println(s1==s2);//true
String s3=new String("chen");
String s4=new String("chen");
System.out.println(s1==s3);//false
System.out.println(s3==s4);//false
System.out.println(s3.equals(s4));//true
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7g6HjbgW-1638315249988)(D:\BaiduNetdiskDownload\JAVA\09-JavaSE进阶每章课堂画图\03-常用类\001-String的内存图.png)]
四、常用方法
1、(掌握).char charAt(int index) 作用:返回下标的那个字符
2、(掌握).int indexOf(String str) 作用:判断某个子字符串在当前字符串中第一次出现处的索引(下标)。
3、(掌握).int lastIndexOf(String str) 作用:判断某个子字符串在当前字符串中最后一次出现的索引(下标)
4、(了解).int compareTo(String anotherString) 作用:比较字符串的大小
5、(掌握).boolean equals(Object anObject) 作用:判断两个字符串是否相等
比较两个字符串必须使用equals方法,不能使用“==”
equals方法有没有调用compareTo方法? 老版本可以看一下。JDK13中并没有调用compareTo()方法。
equals只能看出相等不相等。
compareTo方法可以看出是否相等,并且同时还可以看出谁大谁小。
6、(掌握).boolean equalsIgnoreCase(String anotherString) 作用:判断两个字符串是否相等,并且同时忽略大小写。
7、(掌握).boolean contains(CharSequence s) 作用:判断前面的字符串中是否包含后面的子字符串。
8、(掌握). boolean endsWith(String suffix) 作用:判断当前字符串是否以某个子字符串结尾。
9、(掌握)、boolean startsWith(String prefix) 作用:判断某个字符串是否以某个子字符串开始。
10、(掌握).byte[] getBytes() 作用:将字符串对象转换成字节数组。
11、(掌握).boolean isEmpty() 作用:判断某个字符串是否为“空字符串”。底层源代码调用的应该是字符串的length()方法。
12、(掌握). int length() 作用:判断字符串长度。
13、(掌握). String replace(CharSequence target, CharSequence replacement) 作用:将什么替换成什么
14、(掌握).String[] split(String regex) 作用:拆分字符串。
15、掌握)、 String substring(int beginIndex) 参数是起始下标。作用:从哪个位置开始截取字符串
16、(掌握)、String substring(int beginIndex, int endIndex)作用:从哪个位置开始到哪个位置结束(不包括那个位置)截取字符串。
17、(掌握)、char[] toCharArray() 作用: 将字符串转换成char数组。
18、(掌握)、String toLowerCase() 作用:将字符串全部转化为小写的。
19、(掌握)、String toUpperCase(); 作用:将字符串全部转化为大写的。
20、(掌握). String trim(); 作用:去除字符串前后空白。
21、(掌握). String中只有一个方法是静态的,static String valueOf(数据类型 变量)不需要new对象 这个方法叫做valueOf 作用:将“非字符串”转换成“字符串”。
22、通过源代码可以看出:为什么输出一个引用的时候,会调用toString()方法!!!。
本质上System.out.println()这个方法在输出任何数据的时候都是先转换成字符串,再输出。
五、面试题:
1、面试题:s1=new string(“abc”) s2=new string(“abc”)。这是三个对象,方法区的常量池中有一个,堆内存中有两个对象。
使用 String 时,不建议使用 new 关键字,因为使用 new 会创建两个对象。
") s2=new string(“abc”)。这是三个对象,方法区的常量池中有一个,堆内存中有两个对象。
使用 String 时,不建议使用 new 关键字,因为使用 new 会创建两个对象。
2、面试题:判断数组长度和判断字符串长度不一样。判断数组长度是length属性,判断字符串长度是length()方法。