黑马程序员技术交流社区

标题: String s="a"+"b"+"c"+"d"创造了几个对象 [打印本页]

作者: MGC    时间: 2014-7-30 23:31
标题: String s="a"+"b"+"c"+"d"创造了几个对象
RT,是不是每个字符串就是一个对象?
作者: lijiang    时间: 2014-7-31 00:07
就一个啊,不是s吗?
作者: 罗超8849    时间: 2014-7-31 00:15
这是创建对象,怎么没new一个?
作者: ______雨点ペ    时间: 2014-7-31 00:21
String是字符串引用型数据,并且这里对其赋予了初始值,因此会在内存方法区的常量池中为“abcd"分配内存空间,故创建了一个对象。
作者: Peach2014    时间: 2014-7-31 00:27
创建的对象只有s一个,但是在Java方法区的常量池中开辟了四个空间,分别存放了“a”“b”“c”“d“四个常量。
作者: MGC    时间: 2014-7-31 01:13
______雨点ペ 发表于 2014-7-31 00:21
String是字符串引用型数据,并且这里对其赋予了初始值,因此会在内存方法区的常量池中为“abcd"分配内存空 ...

谢谢,我明白了
作者: fantacyleo    时间: 2014-7-31 01:18
如果常量池之前没有保存"a" "b" "c" "d" "abcd"中的任何一个,我认为这条语句会在常量池中创建5个对象
作者: 我行我SHOW‰    时间: 2014-7-31 03:19
过来长点见识
作者: hejinzhong    时间: 2014-7-31 05:52
按内存来说,就只有一个对象s,但是按照java的面向对象来说,是创建了5个对象。
作者: 晓风    时间: 2014-7-31 09:14
1,s == "a"
作者: Ezreal    时间: 2014-7-31 13:34
应该是一个吧
作者: icris    时间: 2014-7-31 13:51
如果单纯分析语句,我觉得会有:"a" , "b" , "ab" , "c" , "abc" , "d" , "abcd" 这样 7 个。
但是编译器可能优化,有人说 String s="a"+"b"+"c"+"d"; 跟 String s = "abcd"; 是等效的,那就只有一个了
作者: liubea    时间: 2014-7-31 13:51
这个不一定,当字符串池中已经存在"abcd",那么内存中不会再创建对象;如果字符串池中没"abcd",那么会创建该对象。
作者: 叶飞翔    时间: 2014-7-31 14:22
Peach2014 发表于 2014-7-31 00:27
创建的对象只有s一个,但是在Java方法区的常量池中开辟了四个空间,分别存放了“a”“b”“c”“d“四个常 ...

经典啊,明白了
作者: 莫忘本心    时间: 2014-7-31 16:38
就是1个吧  s就是“abcd”吧
作者: li963309584    时间: 2014-7-31 19:00
要看常量池里边有没有“a","b","c","d",着几个对象了,要是有就是1个,没有就是5个,反正总共这5个都会被创建,你可以看看堆栈,常量池那一块儿
作者: 怀念黑海岸    时间: 2014-7-31 19:37
只创建了一个对象嘛,因为a+b+c+d这些是常量进行连接,java虚拟机在对其进行编译的时候会对其进行优化,直接将他们整合成一个对象,所以只创建了一个对象。如果你是
  String s =new("a")+new("b")+new("c")+new("d");
的话那就创建了5个对象了。
作者: 楚风★憧憬    时间: 2014-7-31 20:29
关键是看new操作符吧





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