鉴于
String s= "God";
String k= "God";
s
和k
都被认为是指同一个String
对象吗?是否存在String
对象的单个实例?
答案 0 :(得分:5)
是的,Java应该对此进行优化,以便s == k
节省内存。
(引用s和k引用同一个对象)。
由于java没有指针,你不能改变s或k指向的字符串, 但你当然可以改变s或k指向的字符串。如果java允许指针, 然后改变点数,上面的优化会产生不良后果。
这就是为什么人们不应该使用像" LOCK"锁定线程, 因为如果第三方jar文件做同样的事情,你将在不知不觉中使用相同的对象作为线程锁,这可能会产生非常奇怪且难以发现的错误。
答案 1 :(得分:1)
他们是同一个实例。它们是字符串常量池的一部分。由于字符串被认为是不可变的(反射说不然),这通常没有问题。