gpt4 book ai didi

java - 理解字符串和等于

转载 作者:行者123 更新时间:2023-12-01 06:32:39 24 4
gpt4 key购买 nike

当使用String s1="java";时和String s2= new String("java"); 这两个都创建不同的 String 对象吗?我知道如果我使用String s3="java"它使用与 s1 相同的对象,但在 s2 情况下它也使用相同的对象吗?如果是这样那么为什么 StringBuffer sb = new StringBuffer("java");使用不同的对象。因为如果我这样做System.out.println(sb.equals( s1 ));它返回 false;

我对 equals 方法的理解是,它会比较两个引用是否引用同一个对象,除非我们重写了 equals 方法,如果我的理解错误,请告诉我。

最佳答案

does both of these create different String object

这里有两个方面。第一个是字符串文字的实习。从这两个陈述中:

String s1 = "Hello";
String s2 = new String("Hello");

第一个将使用常量池中已经存在的文字字符串“Hello”。如果不存在,它将在常量池中为“Hello”创建一个条目(在这种情况下,您可以说,创建了一个对象)

在第二种情况下,你有 2 个字符串对象 - 第一个是字符串文字 "Hello",它将从常量池中进行实习,然后第二个对象的创建是由于使用new 关键字 - new String(...) 肯定会创建一个新对象。所以:

s1 == s2;  // This will return `false`

因为,s1 和 s2 引用了 2 个不同的 String 对象。

<小时/>

现在是你的第二个案例:

String s1 = "Hello";
StringBuffer sb = new StringBuffer("Hello");

在第二条语句中,您正在创建一个新的 StringBuffer目的。嗯,首先,StringBuffer 不是 String。其次,由于 StringBuffer 类不会重写 equals() 方法,因此当您像这样调用 equals 方法时:

sb.equals(s1);

它将调用Object#equals()方法,该方法根据引用的值进行比较。因此,它将返回 false,因为 sbs1 指向 2 个不同的实例。

但是,如果你像这样比较它们:

sb.toString().equals(s1);

那么你现在就会得到true。由于String类已经重写了equals()方法,该方法根据内容进行比较。

<小时/>

另请参阅:

关于java - 理解字符串和等于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18405642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com