String
String类定义的变量是指向字符串的对象,然后操作该字符串。String被称为不可变字符串类型,它的对象在创建后不能被更改。
String类的两种创建方式:
//1、通过“”的方式给出字符串对象,在字符串常量池中存储。String a="hello";//2、通过new的方式创建,是创建在堆内存中的。String b=new String("helloworld");
通过“”的方式创建的字符串,若字符串内容相同,则String的变量指向的对象是同一个对象。即
String s1="abc";String s2="abc";System.out.println(s3==s4)//true
通过new的方式创建对象,每new一次,就会产生一个新对象,放在堆内存中。
两种方式的区别
1、双引号给出的字符串对象,存在于堆内存中的字符串常量池中,相同内容只会存储一份。
2、new 的方式是直接在堆内存中创建对象。
面试中创建的String类的问题
1、堆内存中的字符串常量池中,相同内容只会存储一份
2、每次指向的是堆内存中的新对象。
3、Stirng s=new String(“abc”);//这句实际上是创建了两个对象。”abc”在堆内存中的字符串常量池中创建一个对象。new 在堆内存中创建。
4、在运行过程中,s2+”c”进行了运算,所以在堆内存中新创建了一个对象。与字符串常量池中的不是一个对象。
5、java存在编译优化机制,程序在编译时,”a”+”b”+”c”会直接转成”abc”。为什么上个例子不可以在编译的时候进行呢。在编译的时候,IDEA无法识别s2是什么,需要在运行阶段,才能具体知道s2的含义。而本例,在编译的过程中,扫描到”a””b””c”,即可进行转化。
String API
判断字符串内容

在判断字符串的内容时,我们常常只需要判断内容而不是地址。==是判断字符串的地址,会引发一些业务问题。
总结:在进行字符串的内容比较时,引用equals()方法,或equalsIgnoreCase()方法(忽略大小写);在进行基本数据比较时,运用==进行比较。
附加:StringBuilder类 append方法
StringBuilder类:字符缓冲区
StringBuilder()构造一个不带任何字符的字符串生成器,其初始容量为16字符。
StringBuilder(String str)构造一个字符串生成器,并初始化为制定的字符串内容。
StringBuilder.append() 将括号中的参数的字符串表示形式追加到序列中。例如:
StringBuilder sb=new StringBuilder();for (char ch='a'; ch<='z';ch++) {sb.append(ch);}for (char ch='A'; ch<='Z';ch++) {sb.append(ch);}for (char ch='0'; ch<='9';ch++) {sb.append(ch);}
附加:Arrays.toString();
作用:将数组转换为String的形式进行输出
public class test {public static void main(String[] args) {int [] arr=new int[]{1,2,3};System.out.println("arr="+ Arrays.toString(arr));}}
附加:toString()方法
可以对相应的类,添加toString()方法
右键,选择generate,选择toString()方法,可以自动生成
@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +'}';}
ArrayList
集合是一种容器。类型可以不固定,适合做元素个数不能确定,同时存在增删改查的业务场景。功能较数组更为强大。
数组与集合的比较
数组定义后,类型确定,长度固定 集合类型可以不固定,大小可以改变。
数组和集合适合的场景
数组合适做数组个数类型确定的场景。 集合适合做数据个数不确定,且要做增删改查元素的场景。
ArrayList方法
| 创建 | ArrayList list=new ArrayList(); |
|---|---|
| 添加元素 | list.add(index,element); list.add(“”);//直接在集合的末尾添加 |
| 返回制定索引处的元素 | list.get(index); |
| 返回集合中元素的个数 | list.size(); |
| 删除指定索引处的元素,返回被删除的元素 | String e=list.remove(index); |
| 删除指定的元素,返回删除是否成功 | list.remove(“”); |
| 修改指定索引处的元素,返回被修改的元素。 | String e=list.set(index,element); |
ArrayList泛型
ArrayList
从集合中遍历并删除元素

关键是要从后往前遍历。
如果从前往后遍历,由于集合删除一个元素之后,会自动补进,导致有一些元素,会漏过。而从后往前遍历,就不会出现这种情况。
package arraylist;import java.util.ArrayList;public class ArrayListDemo4 {public static void main(String[] args) {ArrayList<Integer> scores =new ArrayList<>();scores.add(98);scores.add(77);scores.add(66);scores.add(89);scores.add(79);scores.add(50);scores.add(100);System.out.println(scores);for (int i = scores.size()-1; i >0 ; --i) {int temp=scores.get(i);if(temp<80){scores.remove(i);}}System.out.println(scores);}}
