黑马程序员技术交流社区

标题: 求助一道题 [打印本页]

作者: liuzegang    时间: 2016-2-6 19:55
标题: 求助一道题
String s = new String(“hello”)和String s = “hello”;的区别?


作者: xuecmg    时间: 2016-2-18 18:29
前者要在堆内存中创建对象(并会检查此时的常量池中有无hello,若没有,会先在常量池中创建对象并赋值hello),然后再把常量池中的hello复制给堆内存中的对象,最后再把堆内存中对象的地址值赋给s

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

所以这两个s虽然结果都是hello,但过程并不是一回事。
作者: BlackFlag    时间: 2016-2-19 10:51
xuecmg说的很对
作者: w417678197    时间: 2016-2-19 11:56
二楼正解!!
作者: liuzegang    时间: 2016-2-22 23:41
xuecmg 发表于 2016-2-18 18:29
前者要在堆内存中创建对象(并会检查此时的常量池中有无hello,若没有,会先在常量池中创建对象并赋值hello ...

谢谢,受教了
作者: is陈小贱di    时间: 2016-2-22 23:48
前一个是有两个对象,一个是字符串常量池里有一个对象,另一个是在堆里;String s ="hello"就是定义一个常量
作者: 沫流    时间: 2016-2-23 22:36
谢谢分享,受教了
作者: qianxin    时间: 2016-2-24 00:00
xuecmg 发表于 2016-2-18 18:29
前者要在堆内存中创建对象(并会检查此时的常量池中有无hello,若没有,会先在常量池中创建对象并赋值hello ...

public String(String original)初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。由于 String 是不可变的,所以无需使用此构造方法,           用string的构造方法,创建对象,并传入hello字符串   ,string 是= “hello”是自动调用tostring方法吗
作者: Lily007    时间: 2016-3-2 10:19
学习了。谢谢分享!!
作者: 执剑人    时间: 2016-3-5 11:42
一楼正解啊!
作者: guyulei    时间: 2016-3-5 17:35
学习啦~
作者: elessarcheung    时间: 2016-3-12 08:44
二楼正解
作者: doglovely    时间: 2016-3-13 14:09
正解。。。。。。。。。。。
作者: 843718696    时间: 2016-3-13 15:07

正解。。。。。。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2