Java中的Char vs String?

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

人们提到记忆问题,这是有效的,但我不认为这是99%的时间非常重要的原因。 一个重要的原因是Java编译器会告诉你是否犯了错误,所以你不必自己搞清楚。

例如,如果您只需要1个字符作为变量,则可以使用char来存储该值,现在没有人可以在其中放置任何其他内容而不会出现错误。 如果您使用了String ,则String可能有两个字符,即使您打算永远不可能。 实际上,字符串中可能有0个字符也一样糟糕。 此外,所有使用String代码都必须说“获取字符串的第一个字符”,它可以简单地说“给我字符”。

一个类比(不幸的是,对你来说可能没有意义)将是,“当我说一个Person有一个名单列表时,为什么我会说一个Person有一个Names ?” 同样的理由适用。 如果你只想让一个Person拥有一个Name ,那么给他一个Name列表会增加很多维护开销。

你可以考虑这个类比:

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

在只需要一个字符的情况下, 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类。 您也可以只创建一个char数组,但是您将没有String类的有用方法,例如.equals().length()方法。

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

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

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

  • 内存占用量char小于一个字符的String
  • 处理速度 – 创建对象会产生开销
  • 程序的可维护性 – 了解类型使您和代码的读者更容易知道预期在char变量中存储哪种数据。

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

char是一种原始数据类型,而string是一个更大的开销。

string也由char ,所以也是如此。

因为char占用的内存较少!

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

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

char是原始类型,而String是真正的Object 。 在性能受到关注的某些情况下,可以想象您只想使用基元。

另一种你想要使用char是你在编写Java 1.0时,你的任务是创建String类!

 public final class String implements java.io.Serializable, Comparable, CharSequence { /** The value is used for character storage. */ private final char value[]; 

java中的所有内容都可以简化为原始类型。 您可以使用基本类型编写任何程序。 所以你需要某种极简主义的文本存储方式。 char也只是一个字节,被解释为一个字符。

此外,如果你想循环字符串中的所有字符,你会做:

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

尝试从String中对一个确切的字符进行子字符串输出会更加尴尬。

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

通过一次更改一个字符来尝试将一个单词转换成另一个单词的地方就是我在编程课中必须做的一个例子。 使用char类型可以让您一次操作单个字符。 它还允许您将int分配给映射到本地字符集的char。

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