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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© MGC 中级黑马   /  2014-7-30 23:31  /  2165 人查看  /  18 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

RT,是不是每个字符串就是一个对象?

18 个回复

倒序浏览
就一个啊,不是s吗?
回复 使用道具 举报
这是创建对象,怎么没new一个?
回复 使用道具 举报
String是字符串引用型数据,并且这里对其赋予了初始值,因此会在内存方法区的常量池中为“abcd"分配内存空间,故创建了一个对象。
回复 使用道具 举报
创建的对象只有s一个,但是在Java方法区的常量池中开辟了四个空间,分别存放了“a”“b”“c”“d“四个常量。
回复 使用道具 举报
______雨点ペ 发表于 2014-7-31 00:21
String是字符串引用型数据,并且这里对其赋予了初始值,因此会在内存方法区的常量池中为“abcd"分配内存空 ...

谢谢,我明白了
回复 使用道具 举报
如果常量池之前没有保存"a" "b" "c" "d" "abcd"中的任何一个,我认为这条语句会在常量池中创建5个对象
回复 使用道具 举报
过来长点见识
回复 使用道具 举报
按内存来说,就只有一个对象s,但是按照java的面向对象来说,是创建了5个对象。
回复 使用道具 举报
1,s == "a"
回复 使用道具 举报
应该是一个吧
回复 使用道具 举报
icris 中级黑马 2014-7-31 13:51:12
12#
如果单纯分析语句,我觉得会有:"a" , "b" , "ab" , "c" , "abc" , "d" , "abcd" 这样 7 个。
但是编译器可能优化,有人说 String s="a"+"b"+"c"+"d"; 跟 String s = "abcd"; 是等效的,那就只有一个了
回复 使用道具 举报 1 0
这个不一定,当字符串池中已经存在"abcd",那么内存中不会再创建对象;如果字符串池中没"abcd",那么会创建该对象。
回复 使用道具 举报
Peach2014 发表于 2014-7-31 00:27
创建的对象只有s一个,但是在Java方法区的常量池中开辟了四个空间,分别存放了“a”“b”“c”“d“四个常 ...

经典啊,明白了
回复 使用道具 举报
Ron 中级黑马 2014-7-31 15:03:34
15#
这到底谁的答案是权威的呀
回复 使用道具 举报
就是1个吧  s就是“abcd”吧
回复 使用道具 举报
要看常量池里边有没有“a","b","c","d",着几个对象了,要是有就是1个,没有就是5个,反正总共这5个都会被创建,你可以看看堆栈,常量池那一块儿
回复 使用道具 举报
只创建了一个对象嘛,因为a+b+c+d这些是常量进行连接,java虚拟机在对其进行编译的时候会对其进行优化,直接将他们整合成一个对象,所以只创建了一个对象。如果你是
  String s =new("a")+new("b")+new("c")+new("d");
的话那就创建了5个对象了。
回复 使用道具 举报
关键是看new操作符吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马