【发布时间】:2013-10-25 12:06:22
【问题描述】:
我的问题很简单。有什么区别 -
s3=s1+s2 和 s3="string" ?
我觉得我解释得太差了。
我明白== 和.equals() 之间的区别。
【问题讨论】:
-
字符串对象与字符串文字不同。文字是直接出现在程序中的东西;
s3不存储文字,而是操作的结果。
我的问题很简单。有什么区别 -
s3=s1+s2 和 s3="string" ?
我觉得我解释得太差了。
我明白== 和.equals() 之间的区别。
【问题讨论】:
s3 不存储文字,而是操作的结果。
当 2 个对象串联时,将创建一个新的 String 对象。但如果你 concat 2 个字符串文字,则不会创建一个新对象。
String s3=s1+s2; // new object created
System.out.println(s3=="string"); // false
String s4="str"+"ing"; // this will not create a new string object
System.out.println(s4=="string"); // true
当编译器遇到String s4="str"+"ing";时,编译器会对编译时常量进行常量折叠并将其放入一个字符串中,因为连接发生在编译时本身,因此完成的字符串进入常量池.
【讨论】:
s3 = s3.intern(),它会在常量池中查找您的字符串文字,如果找到,将返回对它的引用。这样您就可以使 s3 引用池中存在的文字。
【讨论】:
函数==检查to的对象是否相同。
这里内容相同,但对象不同。
查看 Here 以了解 == 和 .equals 之间的区别
【讨论】:
== 用于原始类型。在对象上,您应该使用比较或等于。字符串以特定方式处理。因为字符串上的 == 并不总是正常工作,这是由于 jvm 将它们连接起来所致。它只需要对字符串的引用,== 检查内存位置。
【讨论】:
== 用于对象,以检查它们是否是同一个实例。在对象上应该使用equals 当一个人想要检查两个对象是否具有由这些对象上的equals 的特定实现所定义的“相同内容”(并且如果对象不覆盖equals,@987654325使用@,它只是比较使用==)。
s3 是一个新的String 对象,它是s1 和s2 的串联
== 将比较它们的内存地址。不是它们的字面值。使用.equals()
【讨论】: