String str=new String("hfeighioegh");
程序从右向左第一个是"hfeighioegh"申请了堆空间这个堆空间和"hfeighioegh"的地址相等吗
第二个堆空间是new出来的地址上string变量的值被赋值为"hfeighioegh"是这样解释吗
String str=new String("hfeighioegh");
程序从右向左第一个是"hfeighioegh"申请了堆空间这个堆空间和"hfeighioegh"的地址相等吗
第二个堆空间是new出来的地址上string变量的值被赋值为"hfeighioegh"是这样解释吗
不是 如果你是new出来的 那么会在堆中分配出内存来存放这个对象 只用一个堆空间, 如果你是 String str = "hfeighioegh" 那么会在字符串常量池中开辟
一个内存来存放这个字符串,同时 str存放的地址指向这个字符串,堆中还是只用一个。 不过每次new都是新的,但是 如果是第二种方式会先检测常量 池中
是否存在 你要的字符串,如果存在则指向常量池中的地址。
String s1 = "abcd";
String s2 = "abcd";
System.out.println(s2==s1);
String s3 = new String("abcd");
System.out.println(s3==s1);
第一个结果为 true ,第二个为false.