我今年正在学习Java作为AP计算机科学课程的一部分,当我读到“Char”和“String”时,我无法理解为什么人们会费心去使用“Char”并且只能存储一个字符,而不是只使用“字符串”,并能够存储更多。简而言之,如果它只能存储一个字符,那么“char”的意义何在?
答案 0 :(得分:12)
人们提到记忆问题,这是有效的,但我不认为这是99%的时间非常重要的原因。一个重要的原因是Java编译器会告诉你是否犯了错误,所以你不必自己搞清楚。
例如,如果您只需要1个字符作为变量,则可以使用char
来存储该值,现在没有人可以在其中放置任何其他内容而不会出现错误。如果您使用了String
,则字符串中可能会有两个字符,即使您打算永远不可能。实际上,字符串中可能有0个字符也一样糟糕。此外,使用String
的所有代码都必须说“获取字符串的第一个字符”,它可以简单地说“给我字符”。
类比(不幸的是,对你来说可能没有意义)会是,“当我说Person
有Name
时,为什么我会说Person
有Names
Person
的列表?“同样的理由适用。如果您只希望Name
拥有一个Name
,那么给他一个{{1}}列表会增加很多维护费用。
答案 1 :(得分: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
类。你也可以创建一个char
的数组,但是你不会拥有String
类的有用方法,例如.equals()
和.length()
方法。 / p>
答案 2 :(得分:3)
String
是对象。对象总是在动态存储上。存储一个字符的字符串至少需要十几个字节。
char
s(不是Char
s)是原语。它们占用固定的空间(2个字节)。在需要处理单个字符的情况下,创建单字符字符串会浪费资源。此外,当您希望看到单个字符时,使用字符串将需要验证传入的数据只有一个字符。在必须非常快的情况下,例如基于字符的输入和输出,这将是不可接受的。
总结一下,由于
,您需要char
char
小于一个字符的String
char
变量中存储哪种数据。答案 3 :(得分:1)
char
占用更少的内存。还有多个其他应用程序可以使用单个字符。
char
是一种原始数据类型,而string
是一个更大开销的对象。
string
也由char
组成,所以也是如此。
答案 4 :(得分:0)
因为char占用的内存较少!
此外,char存储在内存中而不是作为参考值,因此从理论上讲,访问char的速度更快(稍后您会理解)
***注意:当我第一次开始编程时,我曾经有同样的想法,为什么在使用long时可以使用int而不必担心大数字。这告诉我你正在成为一名出色的程序员! :)
答案 5 :(得分:0)
char
是原始类型,而String
是真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[];
答案 6 :(得分:0)
java中的所有内容都可以简化为原始类型。您可以使用基本类型编写任何程序。所以你需要某种极简主义的文本存储方式。 char也只是一个字节,被解释为一个字符。
此外,如果你想循环遍历字符串中的所有字符,你会这样做:
char[] chArr = str.toCharArray();
for(int i = 0 ; i < chArr.length ; i++)
{
//do something with chArr[i];
}
尝试从String中输出一个确切的字符会更加尴尬。
答案 7 :(得分:0)
这里已有很多答案。虽然内存问题是有效的,但您必须意识到有时您想直接操作字符。 word ladder game
您尝试通过一次更改一个字符将一个单词转换为另一个单词是我在编程类中必须执行的示例。使用char类型可以让您一次操作单个字符。它还允许您将int分配给映射到本地字符集的char。
你可以做像char c = 97这样的事情;这将打印出来。您可以执行一些操作,例如将字符从97增加到122以打印出所有小写字符。有时这实际上很有用。