1. String 类
String类是final类,即是面试中经常被问到的不可变类。
(1) hashCode
String str = "abc";
String str2 = new String("abc");
以上两种方式的String对象的hashCode一致。方式二在方式一的基础上调用了String的构造函数,在构造函数中将hashCode再次赋值给str2.
(2) hashCode怎么计算的?
hashCode算法很简单,源码如下:
它本质是直接把字符串转换为字符数组,再用算法公式f(0) = val[0]; f(x) = 31*f(x)+val[i]; 计算而来。为什么要转换为字符数组,因为在assci字节表中,每个字符都代表一个数字,这个数字是这个字符在这长表中的序号(编号),这里默认单个字符和这个数字等价,所以char字符可以参与计算。因此hashCode就是int类型的数值。
(3) 方法
String.class中多数方法是重写的。常用的方法总结如下:
构造函数、length()、isEmpty(...)、getBytes(...)、startWith(...)、subStringOf(...)、indexOf(...)、lastIndexOf(...)、split(...)、toLowerCase(...)、toUpperCase(...)、valueOf(...)。
String.valueOf(...) 参数可以是double、float、long、int类型,内部其实调用的是这几个类型的包装类型的toString()方法,如果有人问,为什么没有xx类型的valueOf()方法,你可以回答可能因为它没有toString()方法。