一、String
1、概念
java.lang.String 类代表字符串,它定义的变量可以用于指向字符串对象,然后操作字符串。
注意: String类是不可变字符串,在定义后是不能被更改的。
问:为什么String是不可变字符串,并且不能被更改
答:当声明String类时,在堆内存中会开辟一个“字符串常量池”空间,当我们创建一个String对象时,先查找常量池是否存在,若存在则返回地址;若不存在则先存储再返回地址。不能更改原因是,进行字符串修改操作时,会在堆内存将字符串修改结果存储在堆内存中,再将结果地址覆盖栈内存的地址中。在这个过程中字符串的值是不变的,而是其指向的地址发生了改变。
2、创建对象的两种方式
- 使用 " " 定义
- 构造器
构造器 | 说明 |
---|---|
String() | 创建空白字符串对象 |
String(String original) | 根据传入字符串内容来创建字符串对象 |
String(char[] chs) | 根据字符数组创建字符串对象 |
String(byte[] chs) | 根据字节数组创建字符串对象 |
两种创建方式的区别
- 以 " " 方式创建的字符串对象,在字符串常量池中存储,且相同内容只存储一次。
- 通过构造器创建的字符串对象,每new一次则创建一个新对象存储在栈内存中。
3、常见问题
问1:String s2 = new String(“abc”), s1 = “abc”;两个值做“==”操作,结果是什么?
答:false。因为s2存储的地址是new出来的那个地址,s1存储的地址是"abc"存储在字符串常量池里的地址,在做相等判断时,判断的是地址而不是内容,所以为false。
问2:String s1 = “abc”, s2 = “a”+“b”+“c”;两个值做“==”操作,结果是什么?
答:true。由于Java有编译优化机制,会将可见的字面量直接转为确定的字面量,如s2的连接操作,会在编译期间直接优化成s2 = “abc”,再去比较s1,所以为true。
4、常用API:比较、遍历、替换、截取、分割
- String内容的比较(equals)
方法 | 说明 |
---|---|
boolean equals(Object object) | 将此对象与指定对象内容进行比较 |
boolean equalsIgnoreCase(String anotherString) | 忽略大小写进行内容比较 |
以下是String的常用API。
方法 | 说明 |
---|---|
int length() | 返回长度 |
char charAt(int index) | 返回指定索引处的字符 |
char[] toCharArray() | 将当前字符串转为字符数组返回 |
String substring(int beginIndex,int endIndex) | 根据开始和结束索引截取字符串并返回新字符串 |
String substring(int beginIndex) | 根据开始索引直至末尾截取字符串并返回新字符串 |
String replace(CharSequence target,CharSequence replacement) | 使用新值替换字符串中的旧值并返回新字符串 |
boolean contains(CharSequence s) | 判断当前字符串中是否含有传入的值自己 |
boolean startsWith(String prefix) | 判断当前字符串中是否以传入的值开始 |
String[] split(String regex) | 根据传入规则切割字符串并返回字符串数组 |
二、ArrayList
集合,使用时可以动态变化,长度与类型不固定。
1、概述
ArrayList是一种集合,支持索引。
2、使用方法
- 创建ArrayList:【new ArrayList();】
- 添加元素
方法名 | 说明 |
---|---|
boolean add(E e) | 向末尾添加元素 |
void add(int index,E element) | 向指定位置插入元素 |
3、对泛型的支持
- 概念: 泛型指的是广泛的类型,通常用于不确定类型的声明。
- ArrayList中的泛型使用: 通过ArrayList<E>声明泛型类
- 泛型使用案例
创建ArrayList时,我想要对加入到ArrayList的值进行限制,那么我们可以通过ArrayList<String>、ArrayList<Integer>等等数据类型进行限制。
注意: 集合仅支持存储引用数据类型。
4、常见API
方法 | 说明 |
---|---|
E get(int index) | 返回索引处的元素 |
int size() | 返回集合长度 |
E remove(int index) | 删除索引处的元素并返回删除元素 |
boolean remove(Object o) | 删除指定元素并返回布尔值 |
E set(int index,E element) | 修改索引处的元素,并返回修改的元素 |