9

作为 AP 计算机科学课程的一部分,我今年正在学习 Java,当我在阅读“Char”和“String”时,我不明白为什么有人会费心使用“Char”而只能存储一个字符而不是不仅仅是使用“字符串”并且能够存储更多。简而言之,如果“char”只能存储一个字符,那么它有什么意义呢?

4

8 回答 8

14

人们提到内存问题,这是有效的,但我认为这在 99% 的情况下都不是一个非常重要的原因。一个重要的原因是,如果您犯了错误,Java 编译器会告诉您,这样您就不必自己解决了。

例如,如果您只想为变量使用 1 个字符,则可以使用 achar来存储值,现在没有人可以在其中放入任何其他内容而不会出错。如果您使用 aString代替,则字符串中可能有两个字符,即使您希望这永远不可能。事实上,字符串中可能有 0 个字符,这同样糟糕。此外,所有使用 的代码String都必须说“获取字符串的第一个字符”,它可以简单地说“给我字符”。

一个类比(不幸的是,这对你来说可能还没有意义)是,“当我可以说 a有一个列表时,为什么我要说 aPerson有一个?” 同样的原因也适用。如果您只想 a拥有一个,那么给他一个s 列表会增加很多维护开销。 NamePersonNamesPersonNameName

于 2013-09-20T20:23:22.730 回答
4

你可以考虑这个类比:

你需要一个苹果。你更喜欢手里拿着一个苹果,还是一个可以装更多苹果但只需要一个的大盒子?

在只需要一个字符的情况下,char原始数据类型比使用类更容易。String它的开销也少了很多,因为String该类有很多额外的方法和信息,它需要存储以有效地处理具有多个字符的字符串。当你只需要一个角色时使用这个String类基本上是大材小用。如果您想从两种类型的变量中读取以获取字符,则可以使用以下代码:

// initialization of the variables
char character = 'a';
String string = "a";
// writing a method that returns the character
char getChar()
{
    return character; // simple!
}
char getCharFromString()
{
    return string.charAt(0); // complicated, could fail if there is no character
}

如果这段代码看起来很复杂,你可以忽略它。结论是,String当你只需要一个字符时使用会使事情变得过于复杂。

基本上,String当您需要多个字符时使用该类。您也可以只创建一个chars 数组,但是您将没有String该类的有用方法,例如.equals()and.length()方法。

于 2013-09-20T20:23:57.400 回答
3

Strings 是对象。对象总是动态存储。存储一个字符串至少需要十几个字节。

chars(不是Chars)是原语。它们占用固定数量的空间(2 个字节)。在需要处理单个字符的情况下,创建单个字符串是一种资源浪费。此外,当您希望看到单个字符时,使用字符串需要验证传入的数据是否只有一个字符。这在您必须非常快的情况下是不可接受的,例如基于字符的输入和输出。

总而言之,您需要一个char因为

  • 内存占用- achar小于String一个字符的 a
  • 处理速度——创建对象会产生开销
  • 程序的可维护性——知道类型可以让你和你的代码的读者更容易知道什么样的数据应该存储在一个char变量中。
于 2013-09-20T20:22:57.723 回答
1

char当你真的只需要一个字符时,占用更少的内存。还有多个其他应用程序可以使用单个字符。

char是原始数据类型,而string是开销更大的对象。

Astring也是由 组成的char,所以也有。

于 2013-09-20T20:20:33.037 回答
0

char是原始类型,String而是 true Object。在某些需要考虑性能的情况下,可以想象您只想使用原语。

您想要使用的另一种情况char是,当您编写 Java 1.0 并且您的任务是创建String类时!

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
于 2013-09-20T20:23:06.120 回答
0

java中的一切都可以简化为原始类型。您可以编写任何具有原始类型的程序。因此,您需要某种极简的文本存储方式。char 实际上也只是一个字节,它被解释为一个字符。

此外,如果您想遍历字符串中的所有字符,您可以这样做:

char[] chArr = str.toCharArray();

for(int i = 0 ; i < chArr.length ; i++)
{
    //do something with chArr[i];
}

尝试从字符串中提取一个确切的字符会更加尴尬。

于 2013-09-20T20:23:16.473 回答
0

这里已经有很多答案了。虽然内存问题是有效的,但您必须意识到有时您想直接操作字符。字梯游戏

您尝试通过一次更改一个字符将一个单词变成另一个单词,这是我在编程课上必须做的一个例子。拥有 char 类型可以让您一次操作一个字符。它还允许您将 int 分配给映射到本地字符集的 char。

你可以做类似 char c = 97; 这将打印为 a. 您可以执行诸如将字符从 97 增加到 122 以打印出所有小写字符的操作。有时这实际上很有用。

于 2013-09-20T20:52:16.217 回答
0

因为char占用的内存少!

此外 char 存储在内存中,而不是作为参考值,因此理论上访问 char 更快(稍后您将了解更多)

***注意:当我第一次开始编程时,我曾经有过同样的想法,即当你可以使用 long 而不必担心大数字时,为什么要使用 int。这告诉我你正在成为一名优秀的程序员!:)

于 2013-09-20T20:20:17.120 回答