可以用new一个字符串,字符串本身就比较特殊,根据创建方式不同,占用的内存区域也不同。
如果用String str = new String("acb");那么就会再堆内存中分配一个空间。如果按你上面那种赋值,那么当a="afdf"时候,就会栈中找值等于"dfdf"的字符串,如果找到了,就将a的引用指向它,如果没有找到就开通新的内存,让后a指向它,执行到b=a;时同上,当然这个时候栈中必然有"dfdf"所以不会开辟新的内存空间,而是将b的引用直接指向"dfdf"所占的内存地址。
栈内存中的值可以共享,而堆内存不同,因为堆内存是在编译的时候才会分配的,属于动态的,因为事先也不知道,它会占用多大内存,所以不好分配。
相对来说,为了节省内存,优化程序,不必要的情况下不会去开辟新的物理内存。
如果希望地址不同,但值相同,那可以再new String("?");一个变量,然后用equals方法判断前后变量的值。
即:b = new String("dfdf");
System.out.println(b==a); //false
System.out.println(b.equals(a)); //true
大概就这样,希望对你有帮助!
直接b="dfdf";
b = new String("dfdf"); 强制要求分配内存空间
长知识了,以前没想过这个问题,一般都是想数组和别的应用数据类型