1. 概述
在Java中,char
和 String
类型都处理字符,但它们有各自的特性和用途。
本教程将探讨Java编程中char
和 String
之间的区别。
2. char
和 String
char
在Java中表示一个16位Unicode字符,如字母、数字或符号。因此,char
类型的范围是'\u0000'
到 '\uffff'
(包括)。我们可以说char
是一个无符号16位整数,从0到65535(即2^16 - 1
)。
然而,String
是Java中的核心类。String
包含单个或多个字符。
可以看出,char
和 String
都与字符有关。接下来,我们将更深入地了解这两种数据类型并讨论它们的区别。
为了简化,我们将在示例中使用单元测试断言查看结果。
3. char
是基本类型,而 String
是类
char
和 String
在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
变量与CharSequence
的charAt()
方法的结果来验证这一点。
此外,我们可以将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"。这是因为加法表达式从左到右执行。
在前两个表达式中,无论"\" + h
或 h + \"
,Java都将char
变量h
转换为String
并与其连接到空字符串。但在最后一个表达式中,h + i
产生了一个int
结果(72 + 105 = 177),正如我们之前所学的那样。然后,将int
结果转换为字符串并与其连接到空字符串。
6. 总结
在这篇文章中,我们讨论了Java中char
和String
的区别。以下是总结要点:
-
char
是基本类型,而String
是引用类型。 -
char
只表示一个字符,而String
可以包含多个字符。 -
char + char =
两个char
的和,作为int
。String
和String
连接两个字符串。
如往常一样,这里展示的所有代码片段可以在GitHub上找到。