String

String类定义的变量可以用来存储字符串,同时String类提供了很多操作字符串的功能可以直接使用
image.png

关于String我们要学习什么

image.png

String概述

java.lang.String类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串
Java程序中的所有字符串文字都为此类的对象
image.png

String类的特点详解

String其实是不可变字符串类型,他的对象在创建后不能被更改
image.png
String的对象中存储的是地址,每次对String修改其实是改变了这个地址(让它指向新的字符串对象),而这个地址指向的内存中的字面量并没有发生改变,所以我们称String是不可变的

String创建字符串对象的2种方式

一、直接使用” “定义(推荐方式)

image.png

二、使用构造器创建对象

image.png

三、两种方式创建对象的区别

以””方式给出的字符串对象,在字符串常量池中存储(常量池是堆内存的子集),而且相同的内容只存储一次
通过构造器new出的对象,每new一次都会产生一个新对象,存放在堆内存中
image.png
image.png
image.png

String常见面试题

image.png
问题一: String s2=new String(“abc”);创建了几个对象
回答: 两个”abc”创建了一个对象放在了常量池中,new创建了一个对象放在堆内存中

问题二: String s1=”abc”创建了几个对象
回答: 0个,因为在常量池中已经有了abc,因此不会创建新的对象

问题三:s1==s2?
回答: 不等,原因见问题一二
image.png
这里s1在常量池中,s2在堆内存中
image.png
Java中存在编译优化机制,在编译过程中 “a”+”b”+”c”会直接转化成”abc”(对变量进行赋值时如果右面全是字面量没有变量会先进行计算在进行赋值)

字符串比较

例如:

  1. Scnner sc=new Scnner(System.in);
  2. String s1=sc.next();//这里键盘输入abc
  3. String s2="abc";
  4. if(s1==s2){
  5. System.out.println("true");
  6. else
  7. System.out.println("flase");
  8. }

这段代码的输出值应该是flase,因为对s1来说,从键盘输入的字符串并不是”abc”的形式,因此s1指向的是堆内存,而s2指向的是常量池。
因此 == 并不适合用于字符串的比较,==只用于基本数据类型的比较

String常用API

equals

equals的特点:只关心字符串的内容是否一样,而不关心其他(也就是说它只关心两个字符串指向的内存中存放的值是否一样)
image.png

其他常用API

image.png


ArrayList

集合的特点

1.集合的大小不固定,启动后也可以动态变化,类型也可以选择不固定
2.集合非常适合做元素个数不确定,且进行增删的业务场景
3.数组的功能单一,而集合提供了丰富的API

ArrayList集合

1.ArrayList是集合的一种,它支持索引
2.ArrayList与数组类似,不同的是集合的大小是不固定的
通过创建ArrayList的对象表示得到一个集合容器,同时ArrayList提供了比数组更好用,更丰富的API给程序员使用
image.png

ArrayList我们要学什么

image.png

ArrayList集合的对象获取和操作

首选通过构造器进行创建
image.png
添加数据(不需要是同一类型,这点区别于数组)
image.png
给指定索引位置插入元素
add(索引,添加数据)

ArrayList对于泛型的支持

Java是一种强类型的语言,虽然ArrayList支持多种类型,但并不建议使用
ArrayList<类型(这里的类型只能是引用类型)> :这就是一个泛型类,它可以在编译阶段约束对象只能操作操作某种数据类型
例如:
image.png

ArrayList常用API,遍历

image.png