java多个字符串参数_java-为什么串联两个字符串并将其作为参数...

我正在学习并准备获得Java SE 6认证.我使用的是Kathy Sierra和Bert Bates的书“ Sun Java 6认证程序员学习指南”.我实际上是在Strings,I / O和Parsing.

他们提供了一个我可能希望在考试中看到的那种恶魔般的String问题的示例:

String s1 = "spring ";

String s2 = s1 + "summer ";

s1.concat("fall ");

s2.concat(s1);

s1 += "winter ";

System.out.println(s1 + " " + s2);

What is the output? For extra credit, how many String objects and how

many reference variables were created prior to the println statement?

Answer: The result of this code fragment is spring winter spring

summer. There are two reference variables, s1 and s2. There were a

total of eight String objects created as follows: “spring”, “summer ”

(lost), “spring summer”, “fall” (lost), “spring fall” (lost), “spring

summer spring” (lost), “winter” (lost), “spring winter” (at this point

“spring” is lost). Only two of the eight String objects are not lost

in this process.

我在标题中的问题非常具体.如您所见,他们说总共有8个String对象,但是,在println方法调用处会发生什么?它传递一个String对象引用作为参数,因此s1加上s2的值应该创建另一个String对象,因为它是不可变的,将计数增加到9.

但是(可能甚至更多)s1和s2值之间的空String(“”)是否不应该创建其他对象,从而将计数增加到10?

当他们这样做时,它很重要:

s1.concat(“fall “);

所以,为什么不这样:

s1.concat(s1 + ” ” + s2);

或真正的,这:

System.out.println(s1 + ” ” + s2);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值