new String 到底会创建几个对象呢
String对象详解
简单描述
字符串可以说是java中非常常见的一种数据类型了,我们在日常的开发中对其的使用及其的频繁,并且它也是笔试面试中常考的一个知识点,因此我们非常有必要对其做一定了解。今天这篇文章以一个常见的面试题为引子,详细的对String做一个描述。
String入门常识
- String对象有两个存储的空间,一个常量池(字符串常量池)(jdk1.7后再堆空间中划出一块作为常量池,1.7之前是在方法区中划一块空间做常量池),另一个就是堆空间。
- String之所以有两块存储空间,是因为String在编程中比较常用,为了节省空间,同时也提高了效率(减少了对象的创建)。
- String是被final关键字修饰的类,因此它是不可变对象,不能被继承。
- String对象的拼接都是通过StringBuilder完成,然后调用起toString()方法创建一个新的String对象。
- intern()方法:返回调用者对象在常量池中的对象。比如 “111”.intern(); 如果"111"这个String对象在常量池中已经存在,则该方法的调用只会返回该对象,再不做其他操作,如果"111"这个String对象不在常量池中,该方法会在常量池中创建一个,然后返回。
注: 其实intern()方法是为了让调用者使用它在常量池中的对象,因为,无论是通过字面量的方式使用还是通过new 关键字都会在常量池中创建对象。