String "a" 和 Char 'a' 之间的 SIZE 有区别吗?
Is there a difference in SIZE between String "a" and a Char 'a'?
String "a" 和 Char 'a' 在大小上有区别吗?
当您需要保存单个字母或数字时,您应该使用 Char 吗?
一个字母的String
和一个字母的char
之间没有大小差异(参考String
的支持char
数组,即是)。目前,根据 UTF-16 编码,它们都需要 2 个字节,但一旦 Java 9 于 7 月发布,非 UTF-16 字符将只需要 1 个字节。
String
显然会比原语占用更多的内存,但听起来您过早地进行了优化。
注意实际上有3个案例
字符串"a"
字符'a'
字符 'a'
其中,char 'a' 将占用最少的 space(2 个字节),而 Char 'a' 和 String "a" 都是对象,因此由于与对象相关的内存开销,两者的大小大致相同
让我们来了解一些模糊的科学知识。我创建了以下程序,它创建了一个包含 1 亿个字符或字符串的数组:
public class NewClass {
private static final int SIZE = 100000000;
public static void main(String... args)
{
char[] a = new char[SIZE];
for (int i = 0; i < SIZE; ++i)
{
a[i] = 'a';
}
}
}
我使用 char[]
、一次使用 String[]
和一次使用 Character[]
.
对其进行了分析
堆使用量space:
char[] : 267 million bytes
String[] : 442 million bytes
Character[] : 437 million bytes
所以 char
大约是 1 个字符 String
大小的 60%,这与 Character
(在我的 JVM 上)的大小相当。
String "a" 和 Char 'a' 在大小上有区别吗? 当您需要保存单个字母或数字时,您应该使用 Char 吗?
一个字母的String
和一个字母的char
之间没有大小差异(参考String
的支持char
数组,即是)。目前,根据 UTF-16 编码,它们都需要 2 个字节,但一旦 Java 9 于 7 月发布,非 UTF-16 字符将只需要 1 个字节。
String
显然会比原语占用更多的内存,但听起来您过早地进行了优化。
注意实际上有3个案例
字符串"a"
字符'a'
字符 'a'
其中,char 'a' 将占用最少的 space(2 个字节),而 Char 'a' 和 String "a" 都是对象,因此由于与对象相关的内存开销,两者的大小大致相同
让我们来了解一些模糊的科学知识。我创建了以下程序,它创建了一个包含 1 亿个字符或字符串的数组:
public class NewClass {
private static final int SIZE = 100000000;
public static void main(String... args)
{
char[] a = new char[SIZE];
for (int i = 0; i < SIZE; ++i)
{
a[i] = 'a';
}
}
}
我使用 char[]
、一次使用 String[]
和一次使用 Character[]
.
堆使用量space:
char[] : 267 million bytes
String[] : 442 million bytes
Character[] : 437 million bytes
所以 char
大约是 1 个字符 String
大小的 60%,这与 Character
(在我的 JVM 上)的大小相当。