JAVA字符串面试题学习随笔
1、StringBuffer 并没有重写equals方法所以比较的还是地址,直接父类是CharSequence。
2、substring(0)则返回当前地址,substring(1)则new 一个新对象出来而不是直接去常量池找。同理toUpperCase 这些方法也是new 一个出来,所以地址不同。
3、对 final 变量的访问在编译期间都会直接被替代为真实的值。String str12 = "b";
String str13 = "a" + str12;
final String str15 = "b";
String str16 = "a" + str15;一个是常量和常量的连接还是常量,一个是String类型和常量的连接就是String类型存放在堆中。
4、private static String getBB() {
return "b";
}
String str17 = "ab";
final String str18 = getBB();
String str19 = "a" + str18;
System.out.println(str17 == str19); //false,运行时确定的都不再试常量,所有return这里返回的是一个对象。
5、递归方案实现代码字符串反转
public String reverse(String str) {
if ((null == str) || (str.length() <= 1)) {
return str;
}
return reverse(str.substring(1)) + str.charAt(0);
}