Java中String类的常见面试题
1. 判断定义为String类型的s1和s2是否相等
String s1 = "ab"; String s2 = "abc"; String s3 = s1 + "c"; System.out.println(s3 == s2); //true System.out.println(s3.equals(s2)); //true
解答:
false //s1是变量,s2与常量"c"相加 true
2. String与StringBuffer传递
1 /** 2 * 基本数据类型的值传递,不改变其值 3 * 引用数据类型的值传递,改变其值 4 */ 5 private static void test4() { 6 String s = "heima"; 7 System.out.println(s); 8 change(s); 9 System.out.println(s); 10 11 System.out.println("------------------"); 12 StringBuffer stringBuffer = new StringBuffer(); 13 stringBuffer.append("heima"); 14 System.out.println(stringBuffer); 15 change(stringBuffer); 16 System.out.println(stringBuffer); 17 } 18 19 /** 20 * 调用该方法时实际参数的sb和形式参数的sb指向的是同一个对象(StringBuffer容器) 21 * 方法内部又在该容器里添加了"itcast",所以方法结束时,局部变量的sb消失,但是 22 * 实际参数的sb所指向的容器的内部的内容已经发生了改变 23 * @param stringBuffer 24 */ 25 private static void change(StringBuffer stringBuffer) { 26 stringBuffer.append("itcast"); 27 } 28 29 /** 30 * 因为str是属于局部变量,在调用该方法是实际参数s和形式参数str指向的是同一个对象,但是 31 * 在方法内部将str又指向了一个新的字符串对象,而此时s还是指向的原来的字符串对象 32 * 该方法执行完毕,局部变量str消失,方法内部产生的新的字符串对象称为垃圾,但是s还是指向 33 * 原有的字符串对象,并没有改变 34 * @param str 35 */ 36 private static void change(String str) { 37 str += "itcast"; 38 }
3. Integer的面试题
1 private static void test5() { 2 Integer i1 = 97; 3 Integer i2 = 97; 4 System.out.println(i1 == i2); 5 System.out.println("-----------------"); 6 7 Integer i3 = 199; 8 Integer i4 = 199; 9 System.out.println(i3 == i4); 10 11 /** 12 * -128到127是byte的取值范围,如果在这个取值范围内,自动装箱就不会新创建对象, 13 * 而是从常量池中获取,如果超过了byte取值范围就会再新创建对象 14 * 源码分析: 15 */ 16 public static Integer valueOf(int i) { 17 if (i >= -128 && i <= 127) 18 return Integer.IntegerCache.cache[i + (-Integer.IntegerCache.low)]; 19 return new Integer(i); 20 } 21 }
4. 为什么针对安全保密高的信息,char[]比String更好?
因为String是不可变的,就是说它一旦创建,就不能更改了,直到垃圾收集器将它回收走。而字符数组中的元素是可以更改的。这就意味着可以在使用完之后将其更改,而不会保留原始的数据)。
所以使用字符数组的话,安全保密性高的信息(Eg. 密码之类的)将不会存在与系统中被他人看到。
5. 如何将字符串转换成时间
1 private static void test6() { 2 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 3 String today = simpleDateFormat.format(new Date()); 4 ParsePosition position = new ParsePosition(0); 5 Date date = simpleDateFormat.parse(today, position); 6 }
6. 如何计算一个字符串某个字符的出现次数?
1 private static void test7() { 2 int n = StringUtils.countMatches("111122233333111", "1"); 3 System.out.println(n); 4 }
7. 如何重复一个字符串
1 private static void test8() { 2 String str = "abcd "; 3 String repeated = StringUtils.repeat(str, 3); 4 System.out.println(repeated); 5 }