JavaSE常用API--String

学习JavaSE中的常用API要学会:

1 谁的方法(哪个类的)

2 什么方法(静态还是成员)

3 功能是什么(能干啥)

4 需要传入什么参数

5 返回什么数据

6 方法名

一、String是什么

1. String 是字符串类,保存在java.lang包下,使用是不需要导入。

2. 注意的是,String虽然在很多语言中是基本类型,但是在java中是引用类型,因为String是个类。

    既然是引用类型,就意味着,肯定要使用equals比较,而不能使用==比较,String类中已经覆写了equals方法,比较的是值。

3. String底层是char数组,所以String很多特性就是数组特性。

注意:

(1)字符串一旦创建,不能修改,所以不推荐使用字符串进行大量字符串拼接工作。

(2)为了提高字符串使用效率,java虚拟机使用了一种缓存技术(字符串常量池),正常我们接触的对象都是new在堆内存的,而字符串,而字符串是保存在常量池的。

(3)在程序中,如果要用到某个字符串,会先去常量池中检索是否存在,如果存在就不需要创建,直接拿走使用,如果不存在,则会新建一个,并返回新建的字符串对象。

(4)如果是new的方式,会在堆内存创建一个对象,并且如果常量池中没有的话,也会在常量池中创建一个。

二、新生代/老年代/永久代/元数据区

为什么要分成新生代和老年代? 因为和垃圾回收有关。

新生代/年轻代 : 对于新生代对象,他们都有个共同的特点,就是创建对象之后,很快就不用了,就被回收了,所以需要一个独立的回收算法

老年代 : 老年代中的对象,特点是长期存储,所以需要另一种回收算法。

永久代 : 方法区可以理解为是永久代,存活时间比较长,但是也会被回收。

1 首先该类的所有实例对象都已经被回收了

2 其次加载这个类的ClassLoader也被回收了

3 最后,其他类也没有使用到这个类,满足这三个要求,就可以被回收了

注意:

(1)1.7之前,字符串常量池是保存在运行时常量池中(方法区),属于永久代,但是java7开始,字符串常量池就被移动到堆内存中的老年代内存中了,因为永久代空间比较有限。

(2)但是1.8开始,方法区又被分割出来了,只不过实现方式不再是永久代了,而是元数据区,运行时常量池就在元数据区(最终保存在本地),而字符串常量池,还在堆内存中。

三、基本使用

仍需注意:在程序中,如果要用到某个字符串,会先去常量池中检索是否存在,如果存在就不需要创建,直接拿走使用,如果不存在,则会新建一个,并返回新建的字符串对象。如果new的方式,会在堆内存创建一个对象,并且如果常量池中没有的话,也会在常量池中创建一个。

注意代码中s1与s2是来自字符串常量池中的同一个地址,但s3使用了"new"创建,所以会在堆内存中新开辟一个空间,而s3指向这个堆内存地址,所以"=="下,s1与s2相同,但是s1与s3并不同。所以字符串的比较一定要用equals方法

四、构造方法

1. 字面量写法(三种)

2. 字节数组

3. 字符数组

五、常用方法

1. char CharAt(int index):获取字符串中指定下标的字符。

2. boolean endsWith(String str):判断字符串是否以指定字符串结尾。

    boolean startsWith(String str):判断字符串是否以指定字符串开始。

3. boolean equals(String str):区分大小写的比较。

     boolean equalsIgnoreCase(String str):不区分大小写的比较。

4. byte[] getBytes() : 把字符串转换为字节数组返回。

5. char[] toCharArray() : 把字符串转换为字符数组返回。

6. int indexOf(String str) : 获取字符串中指定字符串出现的起始索引,找不到返回-1。

    int lastIndexOf(String str) : 最后一次出现的索引。

7. int length() : 返回字符串长度。

8. String replace(String s1,String s2) : 把s1全部替换为s2,不支持正则表达式。

    String replaceAll(String s1,String s2) : 支持正则表达式。

9. String[] split(String regex) :  以指定字符串进行分割,返回字符串数组,支持正则表达式。

10. String trim() : 删除字符串两边空格。

11. String substring(int begin) : 获取字符串以某个下标起始的子字符串(包含)。

      String substring(int beginindex,int endindex):获取字符串以某个下标起始(包含),到某个下标结束(不包含)的子字符串。

12. String toUpperCase() 转换为大写 。

      String toLowerCase() 转换为小写。

上面所有的结果为:

六、注意事项

不要频繁进行字符串拼接

上面代码的结果为:

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值