StringBuffer 和 StringBuilder的区别

让人想犯罪 __ 提交于 2020-01-12 23:35:14
  1. 一个线程安全,一个不安全
  2. 不断调用toString方法,buffer不回重复new一个对象,但是builder会。
    @Test
    public void testBuffer() throws Exception {
        StringBuffer buffer = new StringBuffer("aaa");
        String s1 = buffer.toString();
        String s2 = buffer.toString();
        String s3 = buffer.toString();

        Field value = String.class.getDeclaredField("value");
        value.setAccessible(true);
        char[] o1 = (char[]) value.get(s1);
        char[] o2 = (char[]) value.get(s2);
        char[] o3 = (char[]) value.get(s3);
        System.out.println((Object) o1);
        System.out.println((Object) o2);
        System.out.println((Object) o3);
    }
//    [C@6996db8
//    [C@6996db8
//    [C@6996db8


    @Test
    public void testBuilder() throws Exception {
        StringBuilder buffer = new StringBuilder("aaa");
        String s1 = buffer.toString();
        String s2 = buffer.toString();
        String s3 = buffer.toString();

        Field value = String.class.getDeclaredField("value");
        value.setAccessible(true);
        char[] o1 = (char[]) value.get(s1);
        char[] o2 = (char[]) value.get(s2);
        char[] o3 = (char[]) value.get(s3);
        System.out.println((Object) o1);
        System.out.println((Object) o2);
        System.out.println((Object) o3);
    }
//    [C@6996db8
//    [C@1963006a
//    [C@7fbe847c
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!