【学习笔记】JAVA包装类型在JVM中如何分配内存

1、String类型

String str1 = “xxx”;

String str2 = “xxx”;

String str3 = new String(“xxx”);

上述三个赋值的结果是:str1 == str2 != str3

也就是说new String()永远是分配新的内存空间;

而使用双引号赋值,由于Java为String类型提供了缓冲池机制,当使用双引号定义对象时,Java环境首先去字符串缓冲池寻找相同内容的字符串,如果存在就直接拿出来应用,如果不存在则创建一个新的字符串放在缓冲池中。

 

2、Integer类型

Integer i1 = 1;

Integer i2 = 1;

Integer i3 = new Integer(1);

得到的结论和String类型一致。

 

3、总结

String、Integer、Long、Float等都是基础对象的包装类,所以都存在两种赋值方式。当String str = “xxx”或者Integer i = 1时,可以将后面的值当成一个对象来理解,即”xxx”为一个String对象,1为一个Integer对象。将一个对象复制给另一个对象,即将该对象的引用赋值个另一个对象。这样也就不难理解为什么str1==str2了。

以上是按照现象反推的个人理解,如果有大牛路过请不吝指证。

你可能感兴趣的:(JAVA)