String - how many objects are created? ? ?

String

insert image description here

  • String str = “ct”;
//会创建一个对象 字符串常量池中也创建一个字符串。
String s1 = "ct";
//不会创建对象
String s2 = "ct";
  • String s1 = new String(“ct”);
//会创建两个对象 1会在堆上创建一个对象,2字符串常量池中也创建一个字符串。
String s1 = new String("ct");
//会创建一个对象 1会在堆上创建一个对象
String s1 = new String("ct");
  • String s1 = new String(“ct”).intern();
//会创建两个对象 1会在堆上创建一个对象,2字符串常量池中也创建一个字符串。
String s1 = new String("ct");
//不会创建对象
String s1 = new String("ct").intern();
   @Test
    void contextLoads() {
        String s1 = "pkslow";
        String str1 = new String("pkslow");
        String s2 = new String("pkslow").intern();
        System.out.println(str1.intern() == str1);
        System.out.println(s2 == str1);
        System.out.println(s2 == str1.intern());
        System.out.println(s2 == s1);
    }
    
false
false
true
true
  • intern() application
        List<MultiTenancy> multiTenancyList = multiTenancyService.list();
        MultiTenancy multiTenancy1 = new MultiTenancy();
        multiTenancy1.setName(multiTenancyList.get(0).getName().intern());
        MultiTenancy multiTenancy2 = new MultiTenancy();
        multiTenancy2.setName(multiTenancyList.get(1).getName().intern());
        System.out.println(multiTenancy1.getName() == multiTenancy2.getName());
        System.out.println(multiTenancy1.getName().equals(multiTenancy2.getName()));

Guess you like

Origin blog.csdn.net/m0_47878423/article/details/106157895