java - 这两种初始化String的方式有什么区别

标签 java

这两个代码有不同的输出,我不知道为什么。

String a="abc";
String b="abc";
System.out.println(a==b + " " + a.equals(b));

输出为“true true”

String a="abc";
String b=new String("abc");
System.out.println(a==b + " " + a.equals(b));

输出为“假真”

最佳答案

当你使用这个

String a="abc";
String b="abc";

java在内存中只创建一个对象,即abc,这里a和b指向同一个对象,并且==不检查字符串内容而是它检查引用值。但一旦你这样做了

String b=new String("abc");

java 在内存中创建一个与 a 不同的新对象 b ,现在 b 和 a 指向两个不同的对象,因此如果您将内容与 进行比较equals 函数结果将为 true,但如果您现在比较引用,结果将为 false

Read about it's usage

关于java - 这两种初始化String的方式有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38949730/

相关文章:

java - 对 BufferedImage 应用 FFT 给我一个 ArrayIndexOutOfBoundsException

java - QRGen库导入无法解决

java - 如何停止 CruiseControl 构建或更改配置以导致长时间运行的构建超时?

java - 如何确定远程桌面 Swing 应用程序中的字体宽度(以像素为单位)

Java : Automatically set array dimensions based on number of columns in CSV file

java - 将 ConfigurationProperties 绑定(bind)到 <Enum,Pojo> 的映射

java - Spring 批处理 : not able to access jobexecutionConext in flatfileitemwriter

java - java中static final transient的作用是什么?

java - 将 Scala 单位转换为 Java Void

Java 对列表的并发访问只有 1 个编写者和许多对象