每天一道面试题-Java基础-"i"与 new String("i")一样吗

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

<code>String x = "李四";
String y = "李四";
String z = new String("李四");
System.out.println(x == y); // true
System.out.println(x == z); // false/<code>

String x = "李四" 的方式,Java 虚拟机会将其分配到常量池中,而常量池中没有重复的元素,比如当执行“李四”时,java虚拟机会先在常量池中检索是否已经有李四”,如果有那么就将“李四”的地址赋给变量,如果没有就创建一个,然后在赋给变量;而String z = new String(“李四”)则会被分到堆内存中,即使内容一样还是会创建新的对象。


分享到:


相關文章: