首页

关于创建类String对象时,使用new String()和直接使用双引号""的区别

标签:java基础,String,存储机制,缓存池     发布时间:2015-07-06   

前言

字符串是程序使用频率最高的数据类型,为了提供程序运行效率,java设计两种不同的方式来生成字符串对象,一种是调用String的构造方法,另一种直接使用双引号“”。两种方式生成出来的字符串对象,在内存中的存储机制是完全不同的。

一、双引号对象

当使用双引号创建对象时,首先去字符串缓存池(应该在JVM内存的方法区开辟空间,参见“关于JVM内存..”章节)寻找有没有内容相同的字符串,如果有直接关联变量引用地址就OK了,没有再在缓存池创建出来,示例代码如下:

public static void main(String[] args) {@b@        String a="abcd";@b@        String b="abcd";@b@        System.out.println("对象是否相等:"+(a==b));@b@        System.out.println("对象内容是否相等:"+a.equals(b));@b@    }

结果是

对象是否相等:true@b@对象内容是否相等:true

二、类String构造函数

在使用String类构造函数创建对象时,和创建其他类型对象一样,都是在堆内存创建两个不同的对象,它们的存储地址肯定是不一样的,示例代码如下:

public static void main(String[] args) {@b@        String a=new String("abcd");@b@        String b=new String("abcd");@b@        System.out.println("对象是否相等:"+(a==b));@b@        System.out.println("对象内容是否相等:"+a.equals(b));@b@}

结果是

对象是否相等:false@b@对象内容是否相等:true