1. 概述

在Java中,charString 类型都处理字符,但它们有各自的特性和用途。

本教程将探讨Java编程中charString 之间的区别。

2. charString

char 在Java中表示一个16位Unicode字符,如字母、数字或符号。因此,char 类型的范围是'\u0000''\uffff'(包括)。我们可以说char 是一个无符号16位整数,从0到65535(即2^16 - 1)。

然而,String 是Java中的核心类。String 包含单个或多个字符。

可以看出,charString 都与字符有关。接下来,我们将更深入地了解这两种数据类型并讨论它们的区别。

为了简化,我们将在示例中使用单元测试断言查看结果。

3. char 是基本类型,而 String 是类

charString 在Java中的第一个区别是char 是一种基本类型,而String 是一个类。换句话说,它是一个引用类型

因此,char 不需要对象的开销,从而在性能和内存占用方面具有优势。然而,基本类型的功能有限,因为它们没有成员方法。

此外,Java泛型也不支持基本类型。

4. char 只能代表一个字符,而 String 是一个 CharSequence

现在,让我们看看String 类的签名:

public final class String implements Serializable, Comparable<String>, CharSequence, Constable, ConstantDesc{ ... }

代码显示,String 类实现了[CharSequence](/java-char-sequence-string#charsequence) 接口。也就是说,String 对象是一系列字符。

但是,一个char 变量只能携带一个字符。

通过一个例子来理解:

char h = 'h';
char e = 'e';
char l = 'l';
char o = 'o';

String hello = "hello";
assertEquals(h, hello.charAt(0));
assertEquals(e, hello.charAt(1));
assertEquals(l, hello.charAt(2));
assertEquals(l, hello.charAt(3));
assertEquals(o, hello.charAt(4));

如图所示,四个char 变量(h, e, l, o)在上述测试中。字符串"hello"由五个字符组成。我们可以比较每个char 变量与CharSequencecharAt() 方法的结果来验证这一点。

此外,我们可以将String 视为char 数组。String 类提供了toCharArray() 方法,可以将字符串分解成数组中的char

char[] chars = new char[] { h, e, l, l, o };
char[] charsFromString = hello.toCharArray();
assertArrayEquals(chars, charsFromString);

5. 加法(+)运算符

当我们对两个字符串应用加法运算符时,它们会连接在一起:

String h = "H";
String i = "i";
assertEquals("Hi", h + i);

然而,需要注意的是,当我们对两个char 进行加法操作时,结果是int。这个值是这两个char 的和。一个例子可以直观地说明这一点:

char h = 'H'; // the value is 72
char i = 'i'; // the value is 105
assertEquals(177, h + i);
assertInstanceOf(Integer.class, h + i);

此外,当我们“添加”一个char 和一个String 时,char 会被转换为字符串并与其连接。例如,我们经常将一个空字符串与char 变量一起“添加”,以便将char 变量转换为单字符的String

char c = 'C'; 
assertEquals("C", "" + c);

但是,在将多个char 变量与字符串“添加”时,需要注意它们的位置。下面再看一个例子:

char h = 'H'; // the value is 72
char i = 'i'; // the value is 105
assertEquals("Hi", "" + h + i); //(1)
assertEquals("Hi", h + "" + i); //(2)
assertEquals("177", h + i + "");//(3)

在这个例子中,前两个加法操作产生了字符串“Hi"。但最后一个操作的结果是字符串“177"。这是因为加法表达式从左到右执行。

在前两个表达式中,无论"\" + hh + \",Java都将char 变量h 转换为String 并与其连接到空字符串。但在最后一个表达式中,h + i 产生了一个int 结果(72 + 105 = 177),正如我们之前所学的那样。然后,将int 结果转换为字符串并与其连接到空字符串。

6. 总结

在这篇文章中,我们讨论了Java中charString 的区别。以下是总结要点:

  • char 是基本类型,而String 是引用类型。
  • char 只表示一个字符,而String 可以包含多个字符。
  • char + char = 两个char 的和,作为intStringString 连接两个字符串。

如往常一样,这里展示的所有代码片段可以在GitHub上找到。