字符串对象实例

时间:2011-09-25 07:25:13

标签: java

  

可能重复:
  Basic Java question: String equality

鉴于

String s= "God";
String k= "God";

sk都被认为是指同一个String对象吗?是否存在String对象的单个实例?

2 个答案:

答案 0 :(得分:5)

是的,Java应该对此进行优化,以便s == k节省内存。 (引用s和k引用同一个对象)。

由于java没有指针,你不能改变s或k指向的字符串, 但你当然可以改变s或k指向的字符串。如果java允许指针, 然后改变点数,上面的优化会产生不良后果。

这就是为什么人们不应该使用像" LOCK"锁定线程, 因为如果第三方jar文件做同样的事情,你将在不知不觉中使用相同的对象作为线程锁,这可能会产生非常奇怪且难以发现的错误。

答案 1 :(得分:1)

他们是同一个实例。它们是字符串常量池的一部分。由于字符串被认为是不可变的(反射说不然),这通常没有问题。