java 面试基础 String str2=new String("ABC") +"ABC"; 以及 String str2=new String("ABC") +"ABC" 会创建几个对象

 (1)String str1=new  String("A"+"B")  ; 会创建几个对象 ?

  • "A"在字符串常量池创建,这是第一个对象

  • "B"在字符串常量池创建,这是第二个对象

  • “A”+"B"组合"AB"在字符串常量池创建,这是第三个对象

  • new String(),在堆中分配内存,里面存着这字符串"AB"在字符串常量池中的地址,这是第四个对象

  • str 存储在栈中,里面存储着指向堆中new String()的地址

如果以 String str1=“ab"这种方式创建字符串,则只产生一个对象,即字符串常量池中的"ab”,栈中的str中存储着直接指向字符串常量池中的"ab"的地址值。

如果以String str2=“a”+“b”;这种方式创建字符串,同样是只产生一个对象,java在编译时会将a,b,c自动转换成abc,而不会经过拼接的过程,也就是说str1=str2

 

    (2)String str2=new  String("ABC") +"ABC";   会创建几个对象?

  • ABC在字符常量池中创建,这是一个对象(两个"ABC"都是指向同一个字符串常量池中的一个,因为java虚拟机如果发现常量池中已经存在需要创建的字符串中,它就不会重复创建,而是指向那个字符串)

  • new String() ,在堆中分配内存,在里边存着这个"ABC"在字符串常量中的地址 这是第二个
  • "ABC" + "ABC"  组合"ABCABC" 在字符串常量池创建,这是第三个

    

posted @ 2020-11-13 16:49  温柔不过四月  阅读(487)  评论(0)    收藏  举报