String类有哪些方法?
String类是Java最常用的API,它包含了大量处理字符串的方法,比较常用的有:
char charAt(int index):返回指定索引处的字符;
String substring(int beginIndex, int endIndex):从此字符串中截取出一部分子字符串;
String[] split(String regex):以指定的规则将此字符串分割成数组;
String trim():删除字符串前导和后置的空格;
int indexOf(String str):返回子串在此字符串首次出现的索引;
int lastIndexOf(String str):返回子串在此字符串最后出现的索引;
boolean startsWith(String prefix):判断此字符串是否以指定的前缀开头;
boolean endsWith(String suffix):判断此字符串是否以指定的后缀结尾;
String toUpperCase():将此字符串中所有的字符大写;
String toLowerCase():将此字符串中所有的字符小写;
String replaceFirst(String regex, String replacement):用指定字符串替换第一个匹配的子串;
String replaceAll(String regex, String replacement):用指定字符串替换所有的匹配的子串。
a = a + b 与 a += b 的区别
+= 隐式的将加操作的结果类型强制转换为持有结果的类型。如果两个整型相加,如 byte、short 或者 int,首先会将它们提升到 int 类型,然后在执行加法操作。
byte a = 127;
byte b = 127;
b = a + b; // error : cannot convert from int to byte
b += a; // ok
抽象类和接口的区别是什么?
抽象类像是一种模板 接口像是一种行为规范
一个类只能继承一个抽象类 但可以实现多个接口
接口里的类型都是
public static final
而抽象类是各种类型的
接口和抽象类的区别?
抽象类的关键字是extends 接口的继承关键字是implements
抽象类他可以有普通的成员变量 接口他必须是常量
抽象类可以有普通的方法 接口必须是抽象方法
抽象类有构造方法 接口没有
重载和重写有什么区别?
重载就是参数可以变 类型可以变 修饰符可以不同
重写就是 参数必须一样 返回值小于等于 修饰符大于等于
== 和 equals 区别是什么?
对于==
来说:
在基本数据类型中比较的是他们的值
在引用数据类型中比较的使他们地址
对于equals
来说:
在基本数据类型中 相当于
==
在引用数据类型中 没有重写的情况下 也是比较地址 只有重写了才会比较值
介绍下hashCode()?
为什么要有 hashCode?
为什么重写 equals 方法必须重写 hashcode 方法 ?
String,StringBuffer, StringBuilder 的区别是什么?
String是我们java提供的一个字符串类型 他是不可变的 在jdk9以前底层是用final修饰的char字符数组 jdk9以后我们该用了byte字节数据
StringBuffer和StringBuilder 是可变的,他们俩的区别在于 StringBuffer是线程安全的 StringBuilder是线程不安全的 因为StringBuffer 他是有一个同步锁
然后字符串相加在 在底层逻辑上使用StringBuilder去append的 然后toString返回
String为什么要设计成不可变的?
也就是说:不可变的含义是内部数据不可变,而不是说引用不可变。
便于实现字符串常量池因为我们会有大量的相同字符进行创建 会造成空间的浪费
线程安全
加快字符处理速度 由于String是不可变的,保证了hashCode的唯一性,于是在创建对象时其hashCode就可以放心的缓存了,不需要重新计算
评论区