美文网首页
String 内存分配

String 内存分配

作者: tianlang136520 | 来源:发表于2017-04-24 10:46 被阅读42次

String:

final两层含义,1-不可以被继承,2-不可变。

最经典的比较:

String s1 = new String(“myString”); //编译期间不能确定,运行去堆中开辟空间。

String s2 = “myString”;

String s3 = “my” + “String;

System.out.println(s2 == s3);--->true,都取自常量池

System.out.println(s1 == s2); --->false,不是说String数据存储在常量池中么?切常量池中的内容不重复.....

此处要补充一个常量池特点:

       常量池(constant pool)指的是String在编译期确定的,就会放到常量池中一份。

              此处有两个点:1-编译期间,也就是说new这个创建对象是在运行期间才能执行的代码,在编译期间是不能被确定的。2-被确定,是说在编译期间就能确定变量是不是常量(eg:String a = "my"+new String("123") 此处new的就是不能被确定的)。

              编译期间:将.java--->.class  .class文件是jvm能直接运行的文件。 .class文件结构:魔数、版本号、常量池、访问符、类-超类-接口、字段、方法、属性等。其中常量池

内存分配图:

疑问:图中红色线是否存在?String堆和常量池的关系?

String中有个intern()方法,取的是常量池中的字符串。

相关文章

  • String 内存分配

    String: final两层含义,1-不可以被继承,2-不可变。 最经典的比较: String s1 = new...

  • 字符串不可变

    String赋值不能被改变: 字符串内存分配:

  • 字符串相关题目

    问:String str = new String(“abc”),“abc”在内存中是怎么分配的?问:说说Stri...

  • String和StrngBuffer的区别

    String和StringBuffer 1 String: 常量不可变,声明时即在内存(堆)中分配固定长度,且...

  • java 基础

    JAVA 字符串 参考资料:一张图让你明白 java string 的 内存分配java 字符串内存分配的分析与总...

  • C#中String和StringBuilder的区别

    String和StringBuilder的区别 String类型对象的特点: 1.它是引用类型,在堆上分配内存2....

  • 【String类】对象内存分配详解

    关于内存分区参见:Java内存详解 - 内存分区 本文重点描述String对象创建时的内存分配方式。 字符串常量池...

  • NSString内存详解

    内存分配 我们可以看到string1和string2的内存地址是相同的。事实上,@"11"存在于常量存储区,无论你...

  • C#笔试知识点

    1.String与Stringbuilder的区别: String自动分配内存大小,每次往里面写新东西,就会重新分...

  • redis

    string 采用预分配的方式减少内存的频繁分配,实际空间会大于实际字符串长度。SDS(Simple Dynami...

网友评论

      本文标题:String 内存分配

      本文链接:https://www.haomeiwen.com/subject/twjyzttx.html