String s ="a"+"b"+"c"+"d"创建了几个对象

chxx9898 2010-08-23 05:53:02
String s ="a"+"b"+"c"+"d"创建了几个对象
String s=a+b+c+d;这个又创建了几个对象
...全文
1084 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovezx1028 2013-03-17
  • 打赏
  • 举报
回复
tr
lovezx1028 2013-03-17
  • 打赏
  • 举报
回复
一个对象!
lovezx1028 2013-03-17
  • 打赏
  • 举报
回复
疯叻 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bozch 的回复:]

String ss = “a”+”b”+”c”; //创建了5个对象
String ss = “a”+”b”+”c”+”d”; //创建了7个对象
String ss = “a”+”b”+”c”+”d”+”e”; //创建了9个对象
String ss = “a”+”b”+”c”+”d”+”e”+”f”; //创建了11个对象
注: String是一个不可变的字符序列,每次字符相……
[/Quote]
第一个不是6个么 难道ss就不是变量了吗?
侃子 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lqjunf 的回复:]
貌似刚刚又去看了遍张孝祥老师的资料。

下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
答:对于如下代码:
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s2 == "ab");
System.out.println(s3 == ……
[/Quote]

这里判断字符串相等不能用“==”,而应该用equals吧?
  • 打赏
  • 举报
回复
记得前不久见过这样一个,咋有来了
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 sebatinsky 的回复:]
http://blog.csdn.net/java2000_net/archive/2009/01/02/3681385.aspx
看哈这个吧,有用
[/Quote]
讲的挺专业的。顺便说一句,搞搞内存分析也许就更加明白了。
"a" "b" "c" "d" "e" 是字符串常量,存放到内存的data区域,而 s 为String类型的变量(对象),存放到stack 区域内。所以,第一个的String s = “a”+”b”+”c”+”d”+”e”; 只有一个对象创建。(存在stack区)。
j2eeoriented 2010-08-24
  • 打赏
  • 举报
回复
fanpeng613 2010-08-24
  • 打赏
  • 举报
回复
String s ="a"+"b"+"c"+"d"创建了几个对象,这个我们这里的大拿说是一个,因为在java进行编译的时候进行了优化,会把"a"+"b"+"c"+"d"优化成一个常量!
  • 打赏
  • 举报
回复
String s = "a" + "b" + "c" + "d" + "e";
"a" + "b" + "c" + "d" + "e" 是常量,
s 是对象。。。
创建了几个对象?
看了上面的分析有说 7 的,有说 1 的。
小弟初学,还不很清楚,期待大侠们赶紧给出准确答案
足篮智者 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 yudongming 的回复:]
引用 8 楼 xyylove520 的回复:
引用 7 楼 bozch 的回复:
String ss = “a”+”b”+”c”; //创建了5个对象
String ss = “a”+”b”+”c”+”d”; //创建了7个对象
String ss = “a”+”b”+”c”+”d”+”e”; //创建了9个对象
String ss = “a”+”b”+”c”+”d”+”e”+”f”; ……
[/Quote]

下面这个对呀,我咋不理解上面的呢
sebatinsky 2010-08-24
  • 打赏
  • 举报
回复
sebatinsky 2010-08-24
  • 打赏
  • 举报
回复
我晕了,大家中有的人是不是搞迷糊了。还是我记住的本来就不对?
这个显然的嘛,搞的那么复杂啊?

String s = "a" + "b" + "c" + "d" + "e";
System.out.println(“abcde” == s);// true

很显然的事情嘛,当然有人说a+b+c+d+e,这个自己去摸索下源代码吧,
答案==一个,
其实争论这些没有多大用处,只是希望大家可以多看哈源码,有时候明白就行了,解决自己的问题才是最重要的。
快溜 2010-08-24
  • 打赏
  • 举报
回复
有人知道
wangguojunmy 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用18楼主 yudongming 的回复:]
[Quote=引用8 楼 xyylove520 的回复:]

引用 7 楼 bozch 的回复:
String ss = “a”+”b”+”c”; //创建了5个对象
String ss = “a”+”b”+”c”+”d”; //创建了7个对象
String ss = “a”+”b”+”c”+”d”+”e”; //创建了9个对象
String ss = “a”+”b”+”c”+”d”+”e”+”f”; //创建了11个对象
注: String是一个……
[/Quote]
ss是不是一个对象?
String ss = “a”+”b”+”c”;
ss
"a"
"b"
"ab"
"c"
"abc"
好像是这样的吧。

[/Quote]

那个解释正确??
yudongming 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xyylove520 的回复:]
引用 7 楼 bozch 的回复:
String ss = “a”+”b”+”c”; //创建了5个对象
String ss = “a”+”b”+”c”+”d”; //创建了7个对象
String ss = “a”+”b”+”c”+”d”+”e”; //创建了9个对象
String ss = “a”+”b”+”c”+”d”+”e”+”f”; //创建了11个对象
注: String是一个……
[/Quote]
ss是不是一个对象?
String ss = “a”+”b”+”c”;
ss
"a"
"b"
"ab"
"c"
"abc"
好像是这样的吧。
DAVE_LUO 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bozch 的回复:]
String ss = “a”+”b”+”c”; //创建了5个对象
String ss = “a”+”b”+”c”+”d”; //创建了7个对象
String ss = “a”+”b”+”c”+”d”+”e”; //创建了9个对象
String ss = “a”+”b”+”c”+”d”+”e”+”f”; //创建了11个对象
注: String是一个不可变的字符序列,每次字符相加操作都会……
[/Quote]
说得对。
gaishishengzhu1314 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bozch 的回复:]
String ss = “a”+”b”+”c”; //创建了5个对象
String ss = “a”+”b”+”c”+”d”; //创建了7个对象
String ss = “a”+”b”+”c”+”d”+”e”; //创建了9个对象
String ss = “a”+”b”+”c”+”d”+”e”+”f”; //创建了11个对象
注: String是一个不可变的字符序列,每次字符相加操作都会……
[/Quote]

怎么是5,7,9,11这样的??


不解??
LiuQijun 2010-08-24
  • 打赏
  • 举报
回复
貌似刚刚又去看了遍张孝祥老师的资料。

下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
答:对于如下代码:
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s2 == "ab");
System.out.println(s3 == "ab");
第一条语句打印的结果为false,第二条语句打印的结果为true,这说明javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。
题目中的第一行代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,所以,上面的代码应该只创建了一个String对象。写如下两行代码,
String s = "a" + "b" + "c" + "d";
System.out.println(s == "abcd");
最终打印的结果应该为true。
LiuQijun 2010-08-24
  • 打赏
  • 举报
回复
String被设计成不可改变的,每次相加就会有新的对象出现。可修改的字符串有StringBuffer与StringBuilder。StringBuilder是线程不安全的,运行效率高,StringBuffer线程安全,可能慢一点。
加载更多回复(12)

67,517

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧