Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “字符串”之间的大小是否有差异;a「;和一个字符';a';?_Java_String_Char_Memory Optimization - Fatal编程技术网

Java “字符串”之间的大小是否有差异;a「;和一个字符';a';?

Java “字符串”之间的大小是否有差异;a「;和一个字符';a';?,java,string,char,memory-optimization,Java,String,Char,Memory Optimization,字符串“a”和字符“a”之间的大小有差异吗? 当您需要保存单个字母或数字时,是否应该使用字符?一个字母的字符串和一个字母的字符之间没有大小差异(即,指字符串的背衬字符数组)。目前,按照UTF-16编码,它们都需要2个字节,但一旦Java 9在7月份发布,非UTF-16字符将只需要1个字节 字符串显然会比原语占用更多的内存,但这听起来像是过早地优化了。注意,实际上有3种情况 字符串“a” 字符“a” 字符'a' 其中,字符“a”占用的空间最小(2字节),而字符“a”和字符串“a”都是对象,因此由于

字符串“a”和字符“a”之间的大小有差异吗?
当您需要保存单个字母或数字时,是否应该使用字符?

一个字母的
字符串
和一个字母的
字符
之间没有大小差异(即,指
字符串
的背衬
字符
数组)。目前,按照UTF-16编码,它们都需要2个字节,但一旦Java 9在7月份发布,非UTF-16字符将只需要1个字节


字符串
显然会比原语占用更多的内存,但这听起来像是过早地优化了。

注意,实际上有3种情况

字符串“a”
字符“a”
字符'a'


其中,字符“a”占用的空间最小(2字节),而字符“a”和字符串“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
大约是一个1字符
字符串大小的60%,它的大小与
字符的大小相当(在我的JVM上)。

这些完全是dif。同时打印相同值的对象…那么我应该在什么时候使用它们,它们之间的主要区别是什么?primitive
char
(或者
char
,如果需要对象)确保值仅为单个字符。可能是重复的?或者至少它会有帮助
char[]      : 267 million bytes
String[]    : 442 million bytes
Character[] : 437 million bytes