Scanner用于获取键盘输入的数据(基本类型,字符串类型)
获取字符串类型:nextLine(); - 获取下一行字符串的数据(带回车)
next(); - 获取下一个在字符开始的数据(不带回车—)
获取int型类型:nextInt()
当前案例演示通过构造函数创建字符串和直接声明字符串的区别:
1.通过构造函数创建的子字符串保存在堆中
2.直接声明的字符串保存在方法去中的常量池中
常量池的作用:
java字符串的优化机制
1.如果说利用直接声明字符串的时候会区常量池查找,如果有相同的字符串存在则直接拿来用,不在创建新的字符串
2.如果使用构造函数声明字符串(new),那么不管常量池中有没有相同的字符串都会在堆中创建一个新的字符串对象
基本类型:比较的是数据类型的值是不是相同
引用类型:比较的是引用类型的地址值是否相同
字符串常量池内存图:
String判断的演示
对象的顶级父类:Object
是类层级结构中的根类(是java中的顶级父类),所有的类都直接或者是间接的继承Object
String判断功能:
boolean equals(Object):比较两个字符串的内容是不是相同(比较两个双胞胎像不像)
boolean equalsIgnoreCase(String str):比较两个字符串的内容是不是一样的,忽略大小写
boolean startWith(String str):判断这个字符串是不是以指定的str开头
boolean endWith(String str):判断这个字符串是不是以指定的str结束
注意:
问: == 与 equals的区别:
- == 在基本类型中比较的是两个变量的值是不是相等
- == 在引用类型中比较的是两个对象的地址值是不是相同
- equals在应用类型中比较的是两个对象像不像
- 在Object类中有一个equals方法,这个方法如果说不重写,是按照 == 的比较规则进行比较的
String类的获取的功能:
int length():获取字符串的长度(字符的个数) 注意:length后有括号是方法,没括号是属性。例如arr.length是数组长度的属性
char charAt(int index):获取指定索引处的字符
int indexOf(String str):获取str字符串对象中第一次出现的位置
String subString(int start):从start开始截取字符串
String subString(int start,int end):从start开始截取字符串,到end结束 - 含头不含尾
字符串与数组之间的转化:
方法
char[ ] toCharArray():把字符串转化为字符数组
String toLowerCase():把字符串中所有的字符转化为小写字母
String toUpperCase():把字符串中所有的字符转化为大写字母
String类的其他的功能:去两边空白,分割
1.去除字符串两边的空白:String trim()
2.按照指定的格式分割字符串:String[ ] split(String str)
Array 和 Arrays 的区别
Arrays是一个工具类,封装了很多的挂怒数组的操作方法,这个类存放在Util包中
StringBuffer和StringBuilder 的区别:
1.StringBuffer是可追加的字符串,使用的方式和StringBuilder完全一样
2.区别:
StringBuilder是jdk5.0推出的,线程不安全,但是效率高
StringBuffer是jdk1.0推出的,线程是安全的,但是效率低(非特殊情况可以不使用)- 不需要导包,属于lang包
3.java在当初设计的时候做了过渡设计,所以在jdk5.0的时候就推出了StringBuilder
线程安全:一群人过安检 - 一个一个的过
线程不安全:一群人上卡车
StringBuilder:是一个可变长度的字符串
构造函数:StringBuilder()
常用的成员方法:
public int capacity():返回当前的容量
public int legth():返回长度(字符数)
容量:理论值
长度:实际值
其他的用法:
1.添加功能:append(任意类型的数据)
2.反转功能:reverse()