| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1188 人关注过本帖
标题:[讨论] 一道String的问题
取消只看楼主 加入收藏
limaoyuan
Rank: 1
等 级:新手上路
帖 子:493
专家分:0
注 册:2006-6-25
收藏
 问题点数:0 回复次数:3 
[讨论] 一道String的问题
public class StringTest
{

public static void main(String[] args)
{
String str1 = "hello";
String str2 = "hel";
str2 = str2 + "lo";
System.out.println("str1 == str2 :" + (str1 == str2));
}
}

//为什么会打出false呀?

[此贴子已经被作者于2007-2-14 16:43:43编辑过]

搜索更多相关主题的帖子: String 
2007-02-14 16:35
limaoyuan
Rank: 1
等 级:新手上路
帖 子:493
专家分:0
注 册:2006-6-25
收藏
得分:0 


哎...如果声明一个字符串,那么这个字符串指象的对象是不是应该在字符串常量池中?

如String str1 = "hello";
那么字符串str2 后来也等于"hello"呀,按说应该和str1指向相同的引用,为什么str1==str2会返回false?

此段程序在c#中是返回的true;很奇怪,所以来问问.....


请有真知水平的朋友来回答问题...如果你看不起这个问题,你可以不泄,但请你也闭嘴!


我在说's blog   http://www..cn
2007-02-14 23:05
limaoyuan
Rank: 1
等 级:新手上路
帖 子:493
专家分:0
注 册:2006-6-25
收藏
得分:0 
以下是引用Eastsun在2007-2-14 23:13:09的发言:
str1是在内存池没错,但str2不是~
你用个反编译工具反编译一下class文件就会发现
str2 =str1+"lo";
实际上是:
str2 = (new StringBuilder()).append(str2).append("lo").toString();
显然,str2是new出来滴(不信去看看StringBuilder的源代码),so...

谢谢!我去查看下..但按说str2怎么会new一下呀..太郁闷了.......
你有没有什么好的反编译工具?


我在说's blog   http://www..cn
2007-02-14 23:43
limaoyuan
Rank: 1
等 级:新手上路
帖 子:493
专家分:0
注 册:2006-6-25
收藏
得分:0 
果然str2是new出来的...是不是凡是字符串相加都是会new一个stringBuilder来一个个append呀?

我在说's blog   http://www..cn
2007-02-15 08:51
快速回复:[讨论] 一道String的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028835 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved