当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-String str = "i" 与 String str = new String("i") 一样吗?

金三银四精选java面试题-String str = "i" 与 String str = new String("i") 一样吗?

来源:图灵教育
时间:2023-11-28 10:31:04
 

string str = "i" 与 String str = new String("i") 一样吗?

不一样

因为内存的分配方式不一样。String str="i"的方式,JVM会将其分配到常量池中;而 String str=new String(“i”)方式,则会被分到堆内存中。

@Test
public void stringDemo1() {
    String str1 = "i";
    String str2 = "i";
    String str3 = new String("i");
    System.out.println(str1 == str2);//true
    System.out.println(str2 == str3);//false
}

String str="i"

Java 虚拟机会将其分配到常量池中:常量池不会重复创建对象。

  • 在String str1="i"中,把i值存在常量池,地址赋给str1。
  • String str2=“i”,则会把i的地址赋给str2,但是i对象不会重新创建,他们引用的是同一个地址值,共享同一个i内存。

String str = new String(“i”)

Java 虚拟机会将其分到堆内存中:堆内存会创建新的对象。

  • String str3=new String(“i”),会创建一个新的i对象,然后将新对象的地址值赋给str3。虽然str3和str1的值相同但是地址值不同。