一个小问题

seesea10523 2008-03-14 03:46:54
public class test
{
private static String s="string";
public static void main(String a[])
{
String t="strin"+“g”;
System.out.println(s==t);
}
}


不运行,你说结果应该是啥?给出详细答案。我实在是不明白呀!
...全文
89 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenzenan 2008-03-17
  • 打赏
  • 举报
回复
这和+运算符没关系啊!
首先是到java常量池中去寻找,如果有的话就不用到堆内存去开配新空间.没有的的话就开配新空间并且指向他.
“==”是比较的两个引用的内存地址,所以这里返回的应该是true
由于s和t实际上都是对于常量string的引用,因此他们的地址是相同的
seesea10523 2008-03-14
  • 打赏
  • 举报
回复
我还是趋向于8楼的说法,java常量池的原因,但是我还是有一个疑问,
在String t="strin"+"g";运算的时候应该是引入了一个StringBuffer吧,
最后是调用StringBuffer的toString方法返回一个值给t。
但是我看源码StringBuffer的toString方法是new一个对象

public synchronized String toString() {
return new String(value, 0, count);
}

晕了呀,谁能说说+号运算是咋回事。
Cradamon 2008-03-14
  • 打赏
  • 举报
回复
“==”是比较的两个引用的内存地址,但是这里返回的应该是true
由于s和t实际上都是对于常量string的引用,因此他们的地址是相同的
如果你把第一句改为
private static String s = new String("string");
则会返回false,因为上面的s是对一个值为string的String对象的引用。
yangxiao_jiang 2008-03-14
  • 打赏
  • 举报
回复
这个是因为java的常量池的原因。java不会去生成新的string类型。


看来你给的分太少,大家都着急要分,这个帖子就没有人看了。
kekeemx 2008-03-14
  • 打赏
  • 举报
回复
如楼主说的==比较的是内存地址,
+连接符连接2个字符串之后就会形成一个新的string对象,
与直接用=赋值给一个string对象还是有区别的.
所以是不会相等的.
seesea10523 2008-03-14
  • 打赏
  • 举报
回复
笔误写出了中文的了
应该是:

String t="strin"+"g";
System.out.println(s==t);

我这里就是不明白s和t怎么是同一个对象呢,因为==比较的内存地址吧。
高手给指点下,谢谢。
yami251139 2008-03-14
  • 打赏
  • 举报
回复
搞什么啊
就算是
String t="strin"+"g";
這樣也是通不過的吧。。
kkkdyc 2008-03-14
  • 打赏
  • 举报
回复
编译不能通过吧,“g” ---> "g" ?
yami251139 2008-03-14
  • 打赏
  • 举报
回复
總覺得通不過。。。
有誰去運行過的告訴下
我懶得開eclipse了。。
yami251139 2008-03-14
  • 打赏
  • 举报
回复
如果能的話。。。
應該是true 應為兩個value都是string
yami251139 2008-03-14
  • 打赏
  • 举报
回复
String t="strin"+“g”;
能運行嗎?
通不過吧。。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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