Java中字符串字面量是否自动生成一个String对象?

来源:互联网 发布:mysql存储小说内容 编辑:程序博客网 时间:2024/06/06 12:34

在开发过程中,经常会需要直接写出一个字符串变量,也就是双引号包括的字符数据,这样一种字面量写法的字符串,是否已经创建了一个String对象呢?如果没有,那么数据存放在哪里呢?如果有,并没有new语句啊,是怎么创建的呢?

看下面代码:

String str1=abc;//创建abc字符串对象

String atr2=new String("abc");//new语句,创建abc字符串对象

   以上代码中,用俩种方式创建了字符串变量str1str2,它们有什么区别呢?其实,Java虚拟机(JVM)在执行这段代码的时候,遇到双引号操作符,它会自动创建一个String对象。该String对象所代表的就是abc,然后再返回该对象的一个引用。

   对于str1字符串来说,它的创建过程同上所说。在创建该对象之前,JVM会在String对象池中去搜索该字符对象是否已经被创建,如果已经被创建,则直接返回一个引用,否则先创建在返回引用。

   而str2字符串变量,它的创建过程就要多一个步骤。除了类似于str1字符串对象创建过程以外,它还会额外的创建一个新的String对象,也就是new关键字的作用,并且返回一个引用给str2.

  尽管str1str2的值是相同的,但是他们的引用是不同的,也就是说一下代码的返回值为false

str1=str2;//结果为false

0 0