当前位置: 首页 > 面试题库 >

比较Java中的字符串

汤兴生
2023-03-14
问题内容
String string1 = "Hi there";
String string2 = "Hi";
String string3 = "Hi";

System.out.println(string1.substring(0, string2.length()) == string2); //1
System.out.println(string1.substring(0, string2.length()).equals(string2)); //2
System.out.println(string1.substring(0, string2.length()).compareTo(string2)); //3
System.out.println(string2 == string3); //4
System.out.println(string2.substring(0) == string3); //5
System.out.println(string2.substring(0) == string3.substring(0)); //6

给我输出:

false
true
0
true
true
true

我不太了解第一行,为什么它会给我带来错误?

如果我在字符串2上添加空格,则此行为false,但如果不添加空格,则为true:

System.out.println(string2.substring(0, string3.length()) == string3);

为什么第1行给我假,但第6行为真,但是如果我在string2上添加空格则为假。

谢谢=)


问题答案:

那里发生了几件事。

当您将两个字符串声明为相等的“ Hi”时,java将对其进行优化以引用相同的字符串对象(因此不必将相同的字符串存储两次)。

“ ==”比较引用。在第1行中使用子字符串时,创建的字符串对象的引用与字符串2的引用不同。

在第6行中,我想象substring(0)进行了优化,知道它可以返回原始字符串,因此这些引用是相等的。



 类似资料:
  • 问题内容: “按字典顺序比较两个字符串”是什么意思? 问题答案: 从@Bozho和@aioobe的答案出发,字典比较类似于在字典中可能会发现的顺序。 Java String类提供了该方法以便按字典顺序比较String。这样使用。 此方法的返回int值可以解释如下: 返回<0,则调用该方法的String按字典顺序排在首位(在字典中排在首位) 返回== 0,则这两个字符串在字典上等效 返回> 0,然后

  • 主要内容:equals() 方法,equalsIgnoreCase() 方法,equals()与==的比较,compareTo() 方法字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等。 在 Java 中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。下面详细介绍这 3 个方法的使用。 equals() 方法 equals() 方法将逐个地比较两个字符串的每个字符是否相同。如果两个字符串具有相

  • 问题内容: 我想检查一个char变量是否是21个特定char之一,我能做的最短方法是什么? 例如: 似乎没有用。我需要这样写吗: 问题答案: 如果您输入的是字符,并且您要检查的字符大部分是连续的,则可以尝试以下操作: 但是,如果您的输入是字符串,则更紧凑的方法(但更慢)是使用带有字符类的正则表达式: 如果您有字符,则首先需要将其转换为字符串,然后才能使用正则表达式:

  • 问题内容: 所以我正在使用它根据每个字符的Unicode值与字符串进行字典顺序比较,并返回一个整数。这是一个代码示例。 在Java中比较日期是否错误? 在测试中,我没有遇到意外结果的情况。如果不是必须的话,我真的不想在字符串中创建Date对象,因为我是在一个长时间运行的循环中执行此操作的。 *根据下面的答案, *Ninja Edit Gleaning可以将日期与字符串进行比较,如果格式正确,则没有

  • 问题内容: 我想将多个字符串相互比较,并找到最相似的字符串。我想知道是否有任何库,方法或最佳实践会返回我哪些字符串与其他字符串更相似的字符串。例如: “The quick fox jumped” -> “The fox jumped” “The quick fox jumped” -> “The fox” 该比较将返回第一个比第二个更相似。 我想我需要一些方法,例如: 某处有这样的东西吗? 编辑:

  • 问题内容: 到目前为止,我一直在程序中使用运算符比较所有字符串。但是,我遇到了一个错误,将其中一个更改为错误,并修复了该错误。 是==坏?什么时候应该使用它,不应该使用它?有什么不同? 问题答案: 测试引用是否相等(它们是否是同一对象)。 测试值是否相等(在逻辑上是否为“相等”)。 在调用之前进行检查,因此您不必(在JDK7起可用,在Guava中也可用)。 因此,如果要测试两个字符串是否具有相同的