我的问题很简单。有什么区别-
s3=s1+s2
和s3="string"
?
我觉得我解释得太差了。
==
我明白和之间的区别.equals()
。
String
当 2 个对象串联时,将创建一个新对象。但是如果你 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
是一个新String
对象,它是s1
和s2
==
将比较它们的内存地址。不是它们的字面值。利用.equals()
函数 == 检查 to 的对象是否相同。
这里内容相同,但对象不同。
在此处查找== 和 .equals 之间的区别
== 用于原始类型。在对象上,您应该使用比较或等于。字符串以特定方式处理。因为 == 在字符串上并不总是正常工作,这是由于 jvm 将它们连接起来所致。它只需要对字符串的引用,== 检查内存位置。