A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 电饭煲 中级黑马   /  2014-5-17 14:32  /  1505 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为了创建一个字符串“this is a program”哪个方法好??原因!
String s1="this is a program";
String s1=new String("this is a program");

6 个回复

倒序浏览
String a = new String("aa"),代表在堆内存中,创建了一个字符串对象,变量a指向该对象,而该对象又指向在常量池中的字符串常量。
而String a = "aa"代表直接由变量a指向常量池中的字符串,省去了中间的堆内存中的对象,因为new对象时,都会在堆中创建对象。
这就像如果有:
String s1 = "hello";
String s2 = "hello";
那么
System.out.println(s1==s2);
结果为true,因为他们的地址值是一致的,都指向常量池中的字符串常量。

String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1==s2);
结果则是false,因为他们都在堆中建立了对象,而对象之间的地址值不同
具体说哪个好,我觉得在单单说创建字符串而言,应该都差不多吧。不知道这样解释怎么样?

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
这两一样,如果推荐,我还是觉得第一个好,这样子我们使用比第二个方便
回复 使用道具 举报
第一种情况,内存有一个实例,(字符串),第二种情况内存有两个实例 一个是字符串 一个是new String();因此第二种是比较浪费空间的。
回复 使用道具 举报
第一种方法好
回复 使用道具 举报
学习学习啦,顶下
回复 使用道具 举报
    学习啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马