我想澄清一些关于java对象的疑问,我有这段代码:
public class Strut
{
public static void main(String[] args)
{
String s=new String("wooo!");
String t=s;
System.out.println(s+","+t);
t="blaaaah";
System.out.println(s+","+t);
}
}
如果我得到了正确的对象总是在堆上分配,因为java没有按设计在堆栈上分配对象。 所以变量s和t只是引用我写的代码中的同一个对象? 因此,当我第一次打印s和t时,我期待相同的结果,这很好。 但是在我修改了t并再次打印字符串之后它们是不同的, 不应该成为blaaaah,因为t和s是对同一个对象的引用? 感谢
答案 0 :(得分:-1)
这可以用一个短语来回答:字符串是不可变的 所以,是的,每次使用引号时,你实际上是在创建一个新的String对象。这就是为什么而不是做:
String s=new String("wooo!");
你可以这样做:
String s = "wooo!";
它会是一样的。
PS.:Immutable意味着每个String对象将具有相同的值,直到它被销毁,如果String refference改变了值,您可以确定它正在引用另一个对象。