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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈雪平 中级黑马   /  2012-12-20 22:09  /  1492 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s="hello"和new String("hello")有区别么?

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 鼓励分 。

查看全部评分

4 个回复

倒序浏览
李培根 来自手机 金牌黑马 2012-12-20 22:12:46
沙发
String s ="hello"在字符串常量池创建一个对象

new String在堆内存创建两个对象

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
String s="hello"和new String("hello")有区别么?
您好:从输出的角度来说是没有区别的
但是从内存的加载来说,String s="hello"加载的时候会先去方法区的字符串常量池查找,如果没有就创建一个hello对象。
但是String s=new String("hello")创建了2个对象,在内存的堆区。这个指向是方法区常量池的hello指向堆区的s

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
举例:
String s ="hello";
String s1 ="hello";
s == s1
结果true;//创建对象“hello”在方法区常量池共同对象
String s =new String("hello");
String s1 =new String("hello");
结果false;//因为创建的对象在堆区,hello有两个地址值
如果还不明白可以加我Qq,送自制内存图一张。QQ406996703



回复 使用道具 举报
不知道我这样说可以不。
String s="hello"这个形式,是在静态存储区创建了一个字符串常量,就是说这个s是一个常量。
而String s1=new String("hello");这个形式,s1是一个对象,意思是把hello封装到了对象中,通过面向对象的思想,有什么需求就找对象,所以,可以猜测到,s1可以使用好多方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马