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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liuzegang 中级黑马   /  2016-2-6 19:55  /  2299 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s = new String(“hello”)和String s = “hello”;的区别?

13 个回复

倒序浏览
前者要在堆内存中创建对象(并会检查此时的常量池中有无hello,若没有,会先在常量池中创建对象并赋值hello),然后再把常量池中的hello复制给堆内存中的对象,最后再把堆内存中对象的地址值赋给s

后者直接在常量池中创建对象并赋值hello,然后把常量池中对象的地址值赋给s

所以这两个s虽然结果都是hello,但过程并不是一回事。
回复 使用道具 举报 1 0
xuecmg说的很对
回复 使用道具 举报
二楼正解!!
回复 使用道具 举报
xuecmg 发表于 2016-2-18 18:29
前者要在堆内存中创建对象(并会检查此时的常量池中有无hello,若没有,会先在常量池中创建对象并赋值hello ...

谢谢,受教了
回复 使用道具 举报
前一个是有两个对象,一个是字符串常量池里有一个对象,另一个是在堆里;String s ="hello"就是定义一个常量
回复 使用道具 举报
沫流 来自手机 初级黑马 2016-2-23 22:36:25
7#
谢谢分享,受教了
回复 使用道具 举报
xuecmg 发表于 2016-2-18 18:29
前者要在堆内存中创建对象(并会检查此时的常量池中有无hello,若没有,会先在常量池中创建对象并赋值hello ...

public String(String original)初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。由于 String 是不可变的,所以无需使用此构造方法,           用string的构造方法,创建对象,并传入hello字符串   ,string 是= “hello”是自动调用tostring方法吗
回复 使用道具 举报
学习了。谢谢分享!!
回复 使用道具 举报
一楼正解啊!
回复 使用道具 举报
学习啦~
回复 使用道具 举报
二楼正解
回复 使用道具 举报
正解。。。。。。。。。。。
回复 使用道具 举报

正解。。。。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马