Java==运算符用于列表和集合比较,但为字符串和StringBuilder比较提供编译时错误 List List=new ArrayList(); Set=newhashset(); 如果(列表==集合){ } String str=“test”; StringBuilder StringBuilder=新的StringBuilder(); if(str==stringBuilder){ }
在上面的代码列表和集合比较中并没有给出编译时错误。那么为什么str和stringBuilder不编译呢。这是直观的解释 可以使用Java==运算符用于列表和集合比较,但为字符串和StringBuilder比较提供编译时错误 List List=new ArrayList(); Set=newhashset(); 如果(列表==集合){ } String str=“test”; StringBuilder StringBuilder=新的StringBuilder(); if(str==stringBuilder){ },java,Java,在上面的代码列表和集合比较中并没有给出编译时错误。那么为什么str和stringBuilder不编译呢。这是直观的解释 可以使用=将列表与集合进行比较,因为可能存在实例同时为列表和集合的类 使用=无法将字符串与StringBuilder进行比较,因为不可能同时作为字符串和StringBuilder的对象 但是,如果您希望能够使用==比较String和StringBuilder,您可以这样做: List<String> list = new ArrayList<String&g
=
将列表
与集合
进行比较,因为可能存在实例同时为列表和集合的类
使用=
无法将字符串
与StringBuilder
进行比较,因为不可能同时作为字符串
和StringBuilder
的对象
但是,如果您希望能够使用
==
比较String
和StringBuilder
,您可以这样做:
List<String> list = new ArrayList<String>();
Set<String> set = new HashSet<String>();
if(list == set) {
}
String str = "test";
StringBuilder stringBuilder = new StringBuilder();
if(str == stringBuilder){
}
显然,上述测试的评估结果为false
。但它会编译
这是合法的,因为类型系统说chars
可以是字符串
。请注意,CharSequence
是String
和StringBuffer
的超类型。(在本例中,超类型是一个接口
,但它不需要是一个接口。)
(对于遇到此问题并想知道代码“试图做什么”的其他人,请注意……以及正确的方法
=
来比较哈希集
和数组列表
是没有意义的。=
操作符测试对象标识,哈希集
和数组列表
都不能是同一个对象equals(Object)
也没有任何意义。javadocs声明一个列表只能与另一个列表“相等”。此外,将显式排序的集合与排序不稳定的集合进行比较……毫无意义String
与StringBuffer
之间的比较。根据equals(Object)
,它们永远不可能是=
,也永远不可能是相等的。如果要按字符比较字符串和字符串缓冲区,简单的答案是String.equals(StringBuffer.toString())
简而言之,代码几乎毫无意义……除了作为OP关于如何打字的真正问题的说明。)相关:因为
List
和Set
是接口@Boristespider——这既不必要也不充分。解释更为复杂。@StephenC这是没有必要的,因为一个人可能是课堂上的。但这应该足够了,不是吗?就好像这两个都是接口一样,一个类总是可以同时实现这两个接口。@BoristheSpider-Hmmm。。。。是的,你是对的。谢谢斯蒂芬,你的解释太棒了!!我认为这个答案应该包括一点,==
几乎肯定不是OP想要的。它只检查引用标识,而不检查两个不同对象是否相等。请注意,等于
在这里也不起作用;查看我的更新。
String str = "test";
CharSequence chars = new StringBuilder();
if (str == chars) {
// ...
}