• 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     }
  • 相关阅读:
    UVa 531 Compromise
    UVa 10130 SuperSale
    UVa 624 CD
    2015年第一天有感
    Bootstrap3.0学习(一)
    IIS上.net注册
    11g Oracle导出表 默认不导出数据为空的表解决
    Oracle数据库密码重置、导入导出库命令
    每天进步一点--WCF学习笔记
    C#每天进步一点--异步编程模式
  • 原文地址:https://www.cnblogs.com/xinlichai0813/p/7804935.html
Copyright © 2020-2023  润新知