✍️ String常见面试题

/**
 * String类常见的面试题。
 */
public class StringExam {
    @Test
    public void test1(){
        String s1 = "abc";
        String s2 = new String("abc");
        System.out.println(s1 == s2); // false
        System.out.println(s1.equals(s2)); // true
    }

    @Test
    public void test2(){
        // 这种拼接会在编译阶段完成。编译器优化策略。
        String s1 = "a" + "b" + "c";
        String s2 = "abc";
        System.out.println(s1 == s2); // true
    }

    @Test
    public void test3(){
        String s1 = "abc";
        String s2 = "ab";
        String s3 = s2 + "c";
        System.out.println(s1 == s3); // false
        System.out.println(s1.equals(s3)); // true
    }

    @Test
    public void test4(){
        // 问题:创建了几个对象?
        // 字符串常量池中1个
        String s1 = "a";
        // 字符串常量池中1个 ,堆1个。
        String s2 = new String("b");
        // 堆中2个。(StringBuilder对象,String对象)
        String s3 = s1 + s2;
    }

    @Test
    public void test5(){
        // 问题:创建了几个对象?
        // 6个对象
        // 字符串常量池中2个
        // StringBuilder1个
        // 堆中的String 3个。
        String s = new String("a") + new String("b");
    }

    @Test
    public void test6(){
        // 这个程序会出现异常吗?如果没有异常,结果是什么?
        // 不会出现异常,结果是:nullnull
        String s1 = null;
        String s2 = s1 + null;
        System.out.println(s2);
    }

    @Test
    public void test7(){

        String s1 = "ab";

        final String s2 = "b";
        String s3 = "a" + s2;

        // 和这个一样了。
        //String s3 = "a" + "b";

        System.out.println(s1 == s3);
    }

    @Test
    public void test8(){

        String s1 = "ab";

        final String s2 = getB();
        String s3 = "a" + s2;

        System.out.println(s1 == s3); // false
    }

    public String getB(){
        return "b";
    }

    @Test
    public void test9(){
        String s1 = "a1";
        String s2 = "a" + 1;
        System.out.println(s1 == s2); // true
    }

    @Test
    public void test10(){
        String s1 = new String("abc");
        System.out.println(s1);

        StringBuilder s2 = new StringBuilder("abc");
        System.out.println(s2);

        // 类型不一样,没有比较的意义。
        // 类型不一样,结果一定是false。
        System.out.println(s1.equals(s2)); // false
    }
}

posted @ 2024-02-21 12:24  捞月亮的小北  阅读(22)  评论(1编辑  收藏  举报