情况:女朋友的Java老师说以下陈述是相同的。与此同时,一本Java书推荐了后一种形式。字符串对象地址可能的问题?
String a = new String("Hi");
String b = "Hi";
然后a.equals(b),和世界很好。
然而,我的Java文本和C知识严肃告诉我,因为a==b
以及a.equals(b)
,如果a
改变(不太可能在String
,但如果它得到无论如何突变,因为它可能是能够通过以某种方式解决即使JVM不会停止)然后b
也将被改变。因此,假设b.equals("Hi")
可能是危险的。
任何见解? b
的声明是否真的很安全,或者只是在RAM上轻很多?
我不是在问有什么不同。我知道b
可能引用了在a
中创建的相同对象。
不要担心RAM。理解这两个声明之间的区别。 –
十六进制,我指的是列出的问题没有的东西:如果字符串以某种方式发生变异,那么该怎么办?字符串是不可改变的,但是核心字符串可能会以某种方式被覆盖... – Aviator45003
@ T.C .:也可能有宇宙射线穿过你的内存并改变一点,最好得到ECC内存。 /秒。但严重的是,您不必担心字符串在内存中发生变化 – Craig