我正在开发一款Android应用程序。该应用程序的主要要求是在内存方面效率高。那么,我应该选择哪一个呢?
String batterylevel;
batterylevel = Float.toString(batteryPct);
或者
char batterylevel[];
batterylevel = Float.toString(batteryPct).toCharArray();
我正在开发一款Android应用程序。该应用程序的主要要求是在内存方面效率高。那么,我应该选择哪一个呢?
String batterylevel;
batterylevel = Float.toString(batteryPct);
char batterylevel[];
batterylevel = Float.toString(batteryPct).toCharArray();
String是Java中的一个类,它将字符数组封装起来,正如您在代码中所看到的那样。
private final char value[];
CString除了字符数组(或宽字符数组)外,还包含字符串大小、分配缓冲区大小和引用计数(同时作为锁标志)。包含字符数组的缓冲区可能比它所包含的字符串要大得多——这允许减少时间成本昂贵的分配调用次数。此外,当CString被设置为零大小时,它仍然包含两个wchar字符。
当然,当您将CString的大小与相应的C风格数组的大小进行比较时,数组会更小。但是,如果您想像CString一样广泛地操作您的字符串,最终您将定义自己的变量来存储字符串大小、缓冲区大小以及有时的引用计数和/或保护标志。确实,您需要存储字符串大小以避免每次需要时都调用strlen。如果您允许缓冲区大于字符串长度,则需要单独存储缓冲区大小,并避免每次添加或减去字符串时调用reallocs。等等——您为一些小的大小增加交换了显著的速度、安全性和功能性的提高。
因此,答案取决于您打算如何使用字符串。假设您想要一个字符串来存储用于记录的类名 - 使用C样式的字符串(const和static)就可以了。如果您需要一个字符串来在MFC或ATL相关类中进行广泛操作和使用,请使用CString系列类型。如果您需要在应用程序的“引擎”部分中操作字符串,这些部分与其界面隔离,并且可能转换为其他平台,请使用std::string或编写自己的字符串类型以满足您特定的需要(当您编写介于界面和引擎之间的“粘合”代码时,这非常有用,否则std::string是首选)。
P.S. 将C++的String与char[]比较