为什么可以在 Java 中连接 Char 和 String?

Why is possible to concatenate Char and String in Java?

这是我试过的;

public String frontBack(String str) {
      char begin = str.charAt(0);
      char end = str.charAt(str.length()-1);
      return begin+str.substring(1,str.length()-1)+end;
}

我原以为它会失败,因为开始和结束都是字符,但事实并非如此。这怎么可能?谁能解释一下吗?谢谢!

Java 的“+”运算符也用作串联运算符。它可以连接原语和对象,并且 return 你会得到一个字符串,这是它的结果。

以下说明假定您熟悉 Java 的包装器 classes。如果您不熟悉它们,请阅读。

Java 的“+”运算符将语句中使用的所有原始数据类型转换为其等效的 Wrapper classes 并在这些实例上调用 toString() 方法并使用该结果,这是表达式中的一个字符串。

例如:在 Java 中,像 System.out.println( 3 + " Four " + 'C' ); 这样的语句最终会创建一个内容为 "3 Four C" 的字符串。

在上面的语句中,3是一个原始的int变量。 “ Four ”是一个 String 对象, 'C' 是一个原始的 char 变量。

在“+”连接操作期间, 3 被转换为相应的 Wrapper class -> Integer。然后在其上调用 toString() 方法。输出是字符串 3,即 "3" “四”已经是一个字符串,不需要进一步处理。 'C' 转换为字符包装器 class 并且 toString() 方法导致 return 字符串 "C".

最后,将这三个相加,得到“3 4 C”。

总结:

  1. 如果在“+”运算符中使用原语,它将被转换为它的包装器class,然后对其调用 toString() 方法,结果将用于追加。
  2. 如果使用了String以外的对象,将调用其toString()方法,其结果将用于追加。
  3. 如果调用了一个字符串,那么,没有什么可做的,字符串本身用于追加。