String类---->引用类型 java.lang包
0.常见的String笔试题
== equals方法的区别
==可以比较基本类型 可以比较引用类型
比较基本类型比较值 比较引用类型比较地址
equals只能比较引用类型(方法)
默认比较地址this==obj
如果想要修改其比较规则 可以重写equals方法
通常重写equals方法时会伴随着重写hashCode方法
比如String类 比如Integer
*String的不可变特性
长度及内容
String与StringBuffer区别
StringBuffer与StringBuilder区别
String对象的存储
"abc"---->字符串常量池
new String("abc")--->堆内存
"a"+"b"+"c"+"d"
*String中常用的方法
1.存在哪儿 java.lang包
没有任何继承关系 实现三个接口Serializable, CharSequence, Comparable<String>
2.如何构建对象
String str = "abc"; //直接将字符串常量赋值给str (字符串常量池)
String str = new String();//无参数构造方法创建空的对象
String str = new String("abc");//带string参数的构造方法创建对象
String str = new String(byte[] )//将数组中的每一个元素转化成对应的char 组合成String
String str = new String(char[] )//将数组中的每一个char元素拼接成最终的String
3.String的不可变特性
String类中包含一个private final char[] value;
体现在两个地方 长度及内容
长度--->final修饰的数组 数组长度本身不变 final修饰数组的地址也不变
内容--->private修饰的属性 不能在类的外部访问
*4.常用的方法
boolean = equals(Object obj);
//继承自Object 重写啦 比较两个字串中的字面值是否相等
int = hashCode();
//继承自Object 重写啦 将当前字符串的每一个char元素拆开 乘以31求和
int = compareTo(String str);
//实现自Comparable接口 实现啦 按照字典(Unicode编码)索引的顺序比较
String = toString();
//继承自Object 重写啦 不再输出 类名@hashCode 字符串中的字面值
--------------------------------------------------------------------
char = charAt(int index);//"abc" 0-->a
//返回给定index对应位置的那个char值
int = codePointAt(int index);//"abc" 0-->97
//返回给定index对应位置的那个char所对应的code码
int = length();
//返回字符串的长度
String = concat(String);
//将给定的字符串拼接在当前字符串之后
5.char = charAt(int index);
返回给定index位置对应的字符
int = codePointAt(int index);
返回给定index位置对应字符的code码
6.int = length();
返回字符串的长度 (其实就是底层char[] value属性的长度)
注意: 区别数组length是属性 String的length()方法 集合size()方法
7.String = concat(String str);
将给定的str拼接在当前String对象的后面
注意: 方法执行完毕需要接受返回值 String的不可变特性
concat方法与 +拼接的性能问题
开发中若遇到频繁的拼接字符串--->通常使用StringBuilder/StringBuffer
========================================================
8.boolean = contains(CharSequence s);
判断给定的s是否在字符串中存在
9. startsWith(String prefix);
endsWith(String suffix);
判断此字符串是否已xx开头/结尾
10.byte[] = getBytes(); ---> getBytes(String charsetName);
char[] = toCharArray();
将当前的字符串转化成数组 "我爱你中国" char[] '我' '爱' '你' '中' '国'
11. int index = indexOf(int/String str [,int fromIndex] ); 四个方法重载
找寻给定的元素在字符串中第一次出现的索引位置 若字符串不存在则返回-1
lastIndexOf(int/String str , [int fromIndex]);
找寻给定的元素在字符串中最后一次出现的索引位置 若不存在则返回-1
12.boolean = isEmpty();
判断当前字符串是否为空字符串 (length是否为0)
注意: 与null之间的区别
13.replace();
replaceAll();
replaceFirst(); 换第一次出现的那个字串
将给定的字符串替换成另外的字符串
14.String[] = split(String regex [,int limit限度界限]);
按照给定的表达式将原来的字符串拆分开的
15.String = substring(int beginIndex [,int endIndex]);
将当前的字符串截取一部分
从beginIndex开始至endIndex结束 [beginIndex,endIndex)
若endIndex不写 则默认到字符串最后
16.String = toUpperCase();
String = toLowerCase();
将全部字符串转换成大写/小写
17.String = trim();
去掉字符串前后多余的空格
18.boolean = matches(String regex)
regular有规律的 expression表达式
正则表达式
================================================================
1.String包 java.lang
2.构造方法 常量 无参数 带参数String byte[] char[]
3.不可变特性
长度 内容
4.String内存机制
常量"abc" 字符串常量池 构造方法new
== equals()区别
"a"+"b"+"c"+"d"; 产生几个对象
5.String与StringBuffer与StringBuilder区别
6.常用的方法
第一梯队(重写)
equals hashCode compareTo toString
第二梯队(常用)
charAt() codePointAt()
indexOf() lastIndexOf()
substring() split() replace()
length() concat() contains(); trim();
getBytes() toCharArray() matches()
第三梯队(一般)
toUpperCase() toLowerCase()
startsWith() endsWith();
isEmpty();
7.正则表达式