java基础---------字符串常量池-创建了几个对象

来源:互联网 发布:mac 建筑 软件 收费吗 编辑:程序博客网 时间:2024/05/22 03:47

常量池:

java设计人员为了高效的使用内存,有了字符串常量池的概念.相同的字面值对象只在字符串常量池中创建一次就可以了,

当再出现相同的字面值对象时,不会创建新的对象,只是引用常量池中已经创建好的对象即可.

 

无则创建,有则返回

JVM虚拟机运行时,人为划分的内存分类

 

:方法调用的入栈、方法执行完毕出栈,方法中的局部变量都在每个方法对应的栈帧中分配.

: 程序运行时动态分配的内存,new创建的对象就在堆里。

方法区(静态区):常量池在方法区里面

 

创建了几个对象

1.直接赋值


只会创建一个对象,在常量池中,无则创建,有则返回

String s1 = "aaa";//创建了一个对象 在常量池中

String s2 = "aaa";//没有创建对象

System.out.println(s1==s2);//true

System.out.println(s1.equals(s2));//true

 

2.new


new创建了两个对象:1.常量池中(无则创建、有则返回) 2.堆里(只要一new就一定会在堆里出现一个新的)

String s1 = new String("aaa");//创建了两个对象 常量池中是字面值对象   堆里是指向常量池中的地址

String s2 = new String("aaa");创建了一个对象 堆里那个

System.out.println(s1==s2);//false 不是引用同一个对象

System.out.println(s1.equals(s2));//true

System.out.println(s1.intern()==s2.intern());//true