day26.1常用类-String

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()方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值