Java中的字符串字符串是什么?

时间:2018-01-13 06:38:54

标签: java character string-comparison string-matching

String s1 = "a";
System.out.println(s1.equals('a'));

输出:

  

任何人都可以解释一下,为什么即将到来false即使字符串s1只有一个字符'a'

6 个答案:

答案 0 :(得分:2)

要了解为什么会收到false,这对您来说意外。首先,您需要了解您的代码

s1.equals('a')

s1String'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中有charString两种不同的东西。

char只是单个字符。

另一方面,String零或更多个字符。您可以使用长度为01> 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类的实例,也不是它们在堆上引用相同的对象。