当前位置: 首页 > 知识库问答 >
问题:

了解字符串和等于 [重复]

仲孙温文
2023-03-14

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

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

共有3个答案

向子安
2023-03-14
String s1="java";

此时,s1指向String对象。

String s2 = new String("java");

根据文档,字符串已经覆盖了 equals 方法,以检查对象的内容。

因此< code>s1.equals(s2)将计算为< code>true,因为它们具有相同的内容。

Object.equals()将检查两个对象是否相同。

漆雕绍晖
2023-03-14

你对等于方法的理解是错误的。它是 == 运算符执行您所描述的操作。

实现equal方法就是为了做到这一点(引自String类文档) :

“当且仅当参数不为空并且是表示与此对象相同字符序列的String对象时,结果为真。”

公西季
2023-03-14

这两者是否都创建了不同的String对象

这里有两个方面。第一个是字符串文字的实习。在这两个语句中:

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

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

在第二种情况下,您有两个字符串对象-第一个是字符串文字< code >“Hello”,它将从常量池中获取,然后第二个对象的创建是由于使用了< code>new关键字- new String(...)肯定会创建一个新对象。所以:

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

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

现在是你的第二个案例:

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);

那你现在就明白了。由于字符串类已覆盖 equals() 方法,该方法根据内容进行比较。

另见:

    < Li > Java中的String和StringBuffer有什么区别? < li >如何在Java中比较字符串?
 类似资料:
  • 问题内容: 我试图理解字符串比较与字符串比较的输出。需要明确的是,我拥有使用==和equals比较两个字符串的类。我试图将==和equals()的输出合并为字符串。equals()的输出会连续显示,但==的输出不会 连续显示。使用Java的装箱功能,将与字符串连接的布尔值联系起来。equals和==都返回布尔值。那么为什么会有这种差异呢?有人可以解释吗? 输出 更新:答案 如果不使用s1 == s

  • 问题内容: String[] letters = {“A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “L”}; 为什么是 Fk呀! 输入AL字母之一绝对不会发生? 问题答案: 字符串是对象。所述通过引用,而不是由它们的内部值进行比较的对象。 有两种解决方案: 使用method来比较两个对象的值。 使用代替。这是原始的,因此可以使用。

  • 本文向大家介绍全面了解python字符串和字典,包括了全面了解python字符串和字典的使用技巧和注意事项,需要的朋友参考一下 很多序列的方法字符串同样适用, 但是,字符串是不可变的,所以一些试图改变字符串的方法是不可用的 1 字符串格式化 1)用元组或者字典格式化字符串 format = "hello,%s.s% enough for you?" values = ('world','Hot')

  • 我的问题很简单。有什么区别-

  • 问题内容: String s1 = “andrei”; String s2 = “andrei”; 提供以下代码,为什么第二个比较s2 == s3为true?s2.toString()返回的实际上是什么?实际位于哪里? 问题答案: 首先是无操作: 其次,对String常量进行了插值,因此s1和s2在幕后被更改为相同的String实例。

  • 问题内容: 请帮我,java中的string.equals如何与null值一起使用?例外情况有问题吗?三种情况: 结果的价值是什么?我期望这个值: result1为true; result2为假; result3为假; 问题答案: 您不能使用解引用(。)来访问实例变量或在实例上调用方法(如果该实例为)。这样做会产生一个。 通常,使用您知道为非null的东西进行字符串比较。例如,。