几个月前,我记得在接受采访时被问到三种不同的方法来比较Java中的字符串的价值。出于好奇,我将在这里问它以供我自己参考。我想到了两个:
str1.equals(str2)
或使用compareTo
,两者都计为总数有什么想法吗? “==”,equalsTo,compareTo,以及它们的任何变化都不是我被告知的。
编辑:修正了一些问题。
答案 0 :(得分:4)
由于使用==
存在如此巨大的异议,我无法抗拒发布 使用它的答案的诱惑(这完全有效!):)) )
String s1 = new String("abc"); // create string object 1
String s2 = new String("abc"); // create a different string object 2
s1 = s1.intern();
s2 = s2.intern();
System.out.println(s1 == s2); // true!
因此,如果我们确保实习,我们可以依靠==
。
除此之外,正如我在上述评论中所建议的那样: 听起来像面试官正在寻找一个“明智的”解决方案,例如:
s1.contains(s2) && s2.contains(s1)
或
s1.matches(s2) && s2.matches(s1)
或
s1.replace(s2, "").isEmpty() && s2.replace(s1, "").isEmpty()
等等。
答案 1 :(得分:2)
除了自己查看每个角色或使用equals()
或compareTo()
之外,我还可以考虑一些方法:
s1.startsWith(s2) && s2.startsWith(s1)
s1.contains(s2) && s2.contains(s1)
s1.indexOf(s2) == 0 && s2.indexOf(s1) == 0
Arrays.equals(s1.toCharArray(), s2.toCharArray())
s1.intern() == s2.intern()
但坦率地说,我并不认为这是一个面试问题的价值。 (如果面试官考虑到最后一个,我认为更好的问题是在使用==
比较字符串值时可以安全地识别所有情况。)
答案 2 :(得分:1)
我在猜测
1)使用'=='运算符'来比较字符串引用
2)String的equals()方法,用于比较精确的字符串内容
3)equalsIgnoreCase()方法,以不敏感的方式比较字符串内容
答案 3 :(得分:1)
如果我消除考虑套管的那些,仍有很多方法,我相信我错过了一些:
s1.equals(s2)
s1.compareTo(s2)
s1.contentEquals(s2)
Objects.equals(s1, s2)
Objects.deepEquals(s1, s2)
修改强>
从技术上讲,这也是一种方式,但我认为这是不好的做法:
s1.intern() == s2.intern()
答案 4 :(得分:0)
有四种方式:
==
.equals()
compareTo()
compare()
阅读more
答案 5 :(得分:0)
其他一些选项可能是(look here for details) -
1。使用equals
方法进行字符串比较
2。使用equalsIgnoreCase
方法进行字符串比较
3。使用compareTo
方法进行字符串比较
4. 使用compareToIgnoreCase
方法进行字符串比较