为什么下面的程序打印false?
书上说java在内容相同的String对象 会使用同一个实例
那为什么引用不相等?
public class test {
public static void main(String[] args) {
String s1="123";
String s2=s1;
String s3=new String("123");
System.out.println(s3==s2);
}
}
要想指向同一内存区域,请使用intern方法
会输出:
Java会确保一个字符串常量只有一个拷贝,当使用new Sting()构建时,总会产生新的对象, 不是常量。
常量与变量的区别在于是否在编译期可以确定值。存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。String的intern()方法就是扩充常量池的一个方法;当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用。
可以参考一下这个链接
http://www.runoob.com/java/ja...