String s1 = "a";
System.out.println(s1.equals('a'));
输出:
假
任何人都可以解释一下,为什么即将到来false
即使字符串s1
只有一个字符'a'
。
答案 0 :(得分:2)
要了解为什么会收到false
,这对您来说意外。首先,您需要了解您的代码
s1.equals('a')
s1
是String
而'a'
是Character
,所以您要比较两个不同的对象。
根据 documentation :
true
如果给定的对象代表与此相当的String
字符串,否则为false
现在,回到 String
类中的equals
方法实现。
// some more code
if (anObject instanceof String) {
// code here
// some more code
}
return false;
你可以看到,它正在检查你传递的对象是String
的类型?在您的情况下,No
,它是Character
。所以,你得到了false
。
答案 1 :(得分:2)
应始终参考规范而不是实现(除非有理由怀疑实现是错误的,但这不是这种情况)。在这种情况下equals
的规范,如上面的评论所引用,是Class String, method equals,其中说:
将此字符串与指定对象进行比较。当且仅当参数不为null并且是一个表示与此对象相同的字符序列的String对象时,结果才为真。
由于'a'不是String,因此结果为false。 'a'是char
类型的字面值,但它被加框以输入Character
,因为equals
需要引用而'a'是值。
答案 2 :(得分:0)
单引号''
和双引号""
答案 3 :(得分:0)
没有。 Java中有char
和String
两种不同的东西。
char
只是单个字符。
另一方面,String
是零或更多个字符。您可以使用长度为0
或1
或> 1
的字符串。但是一个字符只能 长度为1
。
定义角色的方式是在分配期间使用单引号。
char first = 'a' // single quotes
对于String,您使用 double 引号。
String first = "a" // double quotes
答案 4 :(得分:0)
如果您使用的是Eclipse或IntelliJ等IDE,则可以看到sudo service apache2 restart
的实现方式。该方法检查参数是String.equals()
的实例,如果参数不是String
,则返回false。
答案 5 :(得分:0)
单引号用于文字char
,双引号用于文字String
。
此外,如果您将查看String类中的equals方法,它将被覆盖如下:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
两者都不是,char是String类的实例,也不是它们在堆上引用相同的对象。